视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
IE下jquery的fadeIn与fadeOut方法失效的BUG
2020-11-27 20:17:41 责编:小采
文档

BUG1:绝对定位嵌套绝对定位

这个问题遇到过好多次,因为没有做笔记,所以每次遇到这个问题都要研究半天。好记性不如烂笔头,这话一点没错。

<p id="show_list">
 <p class="" val="0">
 <p class=" posab" style="top:50px; left:260px;"> <img class="png_bg" src="/uploads/productimage/1613_634717302959421250.png" /></p> 
 <p class="posab alce" style="top:200px; width:260px; left:80px;">
 <p class=" f18 l22 alce" style="color:#e99417; margin-top:20px;">测试测试测试</p>
 <p class=" f14 l22 alce" style="color:#e99417;">测试测试测试</p>
 <p class="lk444 f14 l22 alce" style="margin-top:5px;">测试测试测试</p>
 </p>
 </p>
    <p class="" val="0">
 <p class=" posab" style="top:50px; left:260px;"> <img class="png_bg" src="/uploads/productimage/1613_634717302959421250.png" /></p> 
 <p class="posab alce" style="top:200px; width:260px; left:80px;">
 <p class=" f18 l22 alce" style="color:#e99417; margin-top:20px;">测试测试测试</p>
 <p class=" f14 l22 alce" style="color:#e99417;">测试测试测试</p>
 <p class="lk444 f14 l22 alce" style="margin-top:5px;">测试测试测试</p>
 </p>
 </p>
<p>

posab 是绝对定位的class

只要把绝对定位换成浮动,就可以实现淡隐淡出的效果了。

<p id="show_list">
 <p class="posab" val="0">
 <p class="" style="margin-top:50px; float:left; margin-left:260px"> <img class="png_bg" src="/uploads/productimage/1613_634717302959421250.png" /></p> 
 <p class="alce" style="margin-top:-200px; width:260px; margin-left:80px; float:left">
 <p class=" f18 l22 alce" style="color:#e99417; margin-top:20px;">测试测试测试</p>
 <p class=" f14 l22 alce" style="color:#e99417;">测试测试测试</p>
 <p class="lk444 f14 l22 alce" style="margin-top:5px;">测试测试测试</p>
 </p>
 </p> 

    <p class="posab" val="0">
 <p class="" style="margin-top:50px; margin-left:260px;"> <img class="png_bg" src="/uploads/productimage/1613_634717302959421250.png" /></p> 
 <p class="alce" style="margin-top:-200px; width:260px; margin-left:80px;float:left">
 <p class=" f18 l22 alce" style="color:#e99417; margin-top:20px;float:left">测试测试测试</p>
 <p class=" f14 l22 alce" style="color:#e99417;">测试测试测试</p>
 <p class="lk444 f14 l22 alce" style="margin-top:5px;">测试测试测试</p>
 </p>
 </p> 

<p>

具体的位置需要做一些调整

BUG2:父级绝对定位嵌套大于父级尺寸的图片

还有一种情况,是IE8独有的BUG,格式如下

 <p class=" posab" style=" top:80px; left:260px;width:550px;height:55px">
 <img class="png_bg" src="image.jpg" />
</p>

如果图片的大小超过了p的大小,在IE8下面淡隐淡出效果将会失效

BUG3:

网上还差了一种bug,具体没有遇到过,现也贴上:

IE6 IE7 IE8 在 position : relative 时fadeIn() fadeOut() bug 解决方案

先看一个例子

<p class="fadein">
 <p>
 <p>I am going to fade in ;</p>
 <p>I am going to fade in ;</p>
 </p>
</p>
$('.fadein').fadeIn();

以上代码基本上在所有主流浏览器都可以达到预期效果

但是现实是残酷的, 大家的html结构当然不会这么简单。

我们再加一点东东

<style>
.relative{position: relative;}
</style>
<p class="fadein">
 <p class="relative">
 <p>I am going to fade in ;</p>
 <p>I am going to fade in ;</p>
 </p>
</p>
$('.fadein').fadeIn();

这个时候在IE 6 78 就会吭爹的事情出现, 动画不出现有木有! 直接show出来有木有!

这是臭名昭著的 IE 大bug: 如果fadeIn的元素的子元素有position属性时 以relative值为最严重 有position属性的元素不会出现fadeIn的效果!

可能的曲线解决方法:

1, 不用position: relative; 这个嘛 有时候可以做到

2,如果1实在做不到, 比如笔者遇到的情况,那就用each()。 你可以一个一个做这个效果, 这个当然是可以做到的, 不过效率太差, 搞不好会挂掉用户的电脑,比如笔者遇到的情况,有几十个上百个子元素 这个方法是万万使不得滴。

针对性解决办法

我们要在使用position:relative 而且不使用each()的情况下达到这个效果,可以吗?

可以!

既然这是一个bug 那一定就有hack的方法

$('.fadein').css('position', 'relative').fadeIn();

在fadeIn()之前动态的将其position属性改为relative; 会解决IE7下的这个bug

<style>
.relative{position: relative; filter: inherit}
</style>

在你子元素有position属性的元素加 filter: inherit; 当前元素的第一层子元素也要加。
这两条一结合 IE678 的问题就都解决了

下载本文
显示全文
专题