css()和opacity ..在fadeIn()之后无效
当我在css()中将不透明度设置为0时,以下fadeIn()不起作用
如果我将不透明度设置为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);
尝试使用fadeTo()
loader.css({ top : ($(window).height() - loader.height()) / 2+'px', left : ($(window).width() - loader.width()) / 2+'px', opacity : 0 }) .fadeTo(1000, 1);
问题是如果元素不可见,jQuery只执行像fadeIn
这样的函数。 jQuery在内部执行$(this).is(':hidden')
来决定是否运行动画。 hidden
filter显然不会检查不透明度是否为0; 它可能应该。
显而易见的解决方案是设置display: none
,或者在调用fadeIn()
之前调用hide()
,如果您确定该元素是隐藏的。
另一种解决方案是重新定义hidden
filter以检查不透明度:
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')
现在将检查不透明度。 见jsFiddle 。
我已经提交了一份错误报告来解决这个问题。
.fadein()用于显示隐藏元素,我不知道它是否适用于不透明度设置为0.而不是不透明度:0尝试显示:无
编辑:看起来你在我的post通过之前想出了这个