万恶的IE,用jQuery时IE下半透明图片fadeOut()或是fadeIn()会先变黑然后再变换透明度,不知怎么解决,求高手
2014.02.21补充说明
经过实践,找到了一种可以在ie8下实现淡入淡出的动画方式,具体的原理就是如果我们使用的是div包括img的方式布置元素,通常我们会在div上加上filter,但是在ie8下,这样相当于在在div和img身上加了双重效果。而且滤镜本身就是加载了图片路径的,所以简单的说,就是在IE8下,只需要给div加上滤镜,img标签可以隐藏掉。这样就可以实现淡入淡出的效果。
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Examples</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$(".a").css({"opacity":"0"});
$(".a").animate({
opacity:1
},1000,'ease-in-out')
});
</script>
<style type="text/css">
body{
padding: 0;
margin: 0;
background: #ccc;
}
img{
width: 100%;
height: auto;
}
.a{
width: 30%;
background: transparent;
-ms-filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(src=logo.png,sizingMethod='scale');"
}
.lt-ie9 .normal{
visibility: hidden;
}
</style>
</head>
<body>
<div class="a">
<img class="normal" src="logo.png" alt="">
</div>
</body>
</html>
之前的回答
IE8不支持opacity的属性,所以需要借助filter来完成淡入淡出的效果。
图片通过background插入
这个时候,给元素加上如下代码:
background: url(about:blank);
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader( src='img/smart-white-2x.png', sizingMethod='scale'); // src插入相对应图片
-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader( src='img/smart-white-2x.png', sizingMethod='scale')" // src插入相对应图片
就可以正常实现淡入淡出的效果。
img元素做动画
但是元素还是会有“火烧”的效果,原因是元素没有背景颜色。
当元素背景是纯色的时候,可以在自身添加:
background: #fff; // 和背景相同的颜色
然后给自身或者其父级元素做动画就会正常实现淡入淡出的效果。
当元素背景不是纯色的时候,添加:
background: transparent;
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)";
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
zoom: 1;
这个时候,只能在其父容器身上做动画,如果在自身元素身上做动画,背景会出现黑色填充。
去除动画
最稳妥的做法,就是去掉IE8下面的淡入淡出动画,在元素身上添加:
filter:none !important;
在我的认知中是解决不了的。。因为你是Png图片。而却用了透明滤镜~(JQ渐变透明是用的滤镜)~