Javascript jQuery选择器,用于检查元素是否设置为隐藏的动画
有没有办法判断某个元素是隐藏的还是当前正在隐藏(通过动画)?我能想到的唯一方法是在调用Javascript jQuery选择器,用于检查元素是否设置为隐藏的动画,javascript,jquery,Javascript,Jquery,有没有办法判断某个元素是隐藏的还是当前正在隐藏(通过动画)?我能想到的唯一方法是在调用show或hide时,在元素的数据中存储一个标志,但我想知道是否还有其他方法?你用$(“:hidden”)获得隐藏的标志,然后用$(“:animated”)获得动画的标志并使用:动画检查.queue()是否包含隐藏方法。是否可以为其执行自定义jQuery选择器 (function($) { var endOpacity, oldStep = jQuery.fx.step.opacity;
show
或hide
时,在元素的数据中存储一个标志,但我想知道是否还有其他方法?你用$(“:hidden”)
获得隐藏的标志,然后用$(“:animated”)获得动画的标志
并使用:动画检查.queue()
是否包含隐藏方法。是否可以为其执行自定义jQuery选择器
(function($) {
var endOpacity,
oldStep = jQuery.fx.step.opacity;
$.fx.step.opacity = function( fx ) {
endOpacity = fx.end;
return oldStep(fx);
};
$.expr[':'].hiding = function(obj){
var $this = $(obj);
return ($this.is(':hidden') || ($this.is(':animated') && endOpacity === 0));
};
})(jQuery);
(但可能需要更多的测试)
因此,只需添加:hiding
,它将匹配隐藏的元素,以及当前动画设置为0的元素。现在,它将只匹配正在消失而不是出现的元素。您可以检查元素的动画是否如下所示:
if( !$('.your-element').is(':animated') ) {
// do animation...
} else {
return false;
}
我用以下代码检查队列:$el.slideUp('slow');console.log($el.queue())
它所拥有的一切都是[“进行中”]
这就是我能给你的所有指针-可能如果你检查了jQuery源代码,你会找到一种从队列对象中读取条目的方法。你是如何实现的?动画开始时在数据中设置一个标志,再次检查那个标志。@nickf啊,一个解决方案,但不是那么优雅!我很想看到你让自定义选择器工作:)@alex-哈哈,挑战?我认为按照您的建议使用setTimeout是行不通的,因为这样选择将异步运行。一定有一些内部的“目标不透明度”值…@nickf是的,这就是我所想的。。。我不知道它是不是被暴露了。我可能会在这里问一个问题:)这是一个良好的开端,但我认为当有多个元素时,您会遇到问题。请参见:--单击段落使其淡入淡出。每隔一秒钟,隐藏的元素会被涂成红色,非隐藏的元素会被涂成蓝色。@nickf如果删除元素检查,这会怎么样