2011-05-18 64 views
8

当我在CSS设置不透明度为0()以下的淡入()不工作CSS()和不透明度..以下淡入()不工作

如果我设置不透明度为1 loader元件被显示但当然不会有任何褪色..

loader.css({ 
     top : ($(window).height() - loader.height())/2+'px', 
     left : ($(window).width() - loader.width())/2+'px', 
     opacity : 0 
    }) 
    .fadeIn(1000); 

如果我使用display:none它的工作原理!?

loader.css({ 
     top : ($(window).height() - loader.height())/2+'px', 
     left : ($(window).width() - loader.width())/2+'px', 
     display : 'none' 
    }) 
    .fadeIn(1000); 
+0

你正在使用什么标记?怎么样一个jsFiddle? – 2011-05-18 13:40:17

回答

13

使用fadeTo()

loader.css({ 
    top : ($(window).height() - loader.height())/2+'px', 
    left : ($(window).width() - loader.width())/2+'px', 
    opacity : 0 
}) 
.fadeTo(1000, 1); 
+0

这解决了这个问题,如果OP想要使用'fadeIn()',通过'display:none'隐藏内容,并且它被分类(由他/她已知的OP编辑)。 – jackJoe 2011-05-18 13:50:31

4

.fadein()用来显示隐藏的元素尝试,我不知道,如果它设置为0而随后不透明度不透明度的工作原理:0试试显示:没有

编辑:看起来你想通了这一点之前,我的文章通过

9

的问题是,jQuery的只有确实喜欢fadeIn如果的Elemen功能t不可见。 jQuery内部做$(this).is(':hidden')决定是否运行动画。 hidden过滤器显然不检查以查看不透明度是否为0;它可能应该。

显而易见的解决方案是像display: none那样设置,或者如果您确定元素已隐藏,请在致电fadeIn()之前致电hide()


另一解决方案是重新定义hidden滤波器来检查不透明度:

jQuery.expr.filters.hidden = function(elem) { 
    var width = elem.offsetWidth, 
     height = elem.offsetHeight; 

    return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css(elem, "display")) === "none" || (elem.style.opacity || jQuery.css(elem, 'opacity')) === "0"); 
}; 

运行.is(':hidden')现在将检查不透明度。 See jsFiddle


我已经提交a bug report来解决这个问题。