Javascript Jquery:等待函数完成
我的问题:Javascript Jquery:等待函数完成,javascript,jquery,function,Javascript,Jquery,Function,我的问题: 我有几个(告诉10)元素。悬停它们中的每一个都会执行一些带有动画的功能。 我确实想这样做,如果其中一个元素的函数(和动画)正在运行,则悬停其他一些元素不会执行该函数 例如:我悬停了一个元素2。动画开始。随着动画的持续,我将元素悬停在3、4和5上。鼠标光标停留在5 我需要什么,当元素2的动画结束,光标停留在5上时,五个元素的动画自动启动 我做到了: var blocked = 0; $(".my_element").live('hover',fun
我有几个(告诉10)元素。悬停它们中的每一个都会执行一些带有动画的功能。 我确实想这样做,如果其中一个元素的函数(和动画)正在运行,则悬停其他一些元素不会执行该函数 例如:我悬停了一个元素
2
。动画开始。随着动画的持续,我将元素悬停在3
、4
和5
上。鼠标光标停留在5
我需要什么,当元素2
的动画结束,光标停留在5
上时,五个元素的动画自动启动
我做到了:
var blocked = 0;
$(".my_element").live('hover',function(){
if(blocked == 0){
blocked = 1;
$(this).find('.content').animate({left:"-=100px"}, function() {
blocked = 0;
});
}, function(){
});
但是在函数完成后,下一个函数直到我晃动鼠标才开始。我认为您的代码很好,但是在动画停止时,您希望在当前悬停的元素上抛出一个事件。这将再次触发动画。我想你也应该排除之前的动画元素 大概是这样的:
var blocked, lastHovered, previous;
$(".my_element").live('hover', function(){
lastHovered = this;
if (!blocked && this != previous){
blocked = true;
previous = this;
$('.content').animate({left:"-=100px"}, 1000, function() {
blocked = false;
if (lastHovered) {
$(lastHovered).trigger("mouseenter");
}
});
}
}, function() {
lastHovered = false;
});
当后续事件被触发时,if语句返回false,然后函数的执行结束。看看如何将if(blocked==0)更改为while循环(循环中有一个睡眠)。。。悬停时,将添加到队列并触发动画。如果动画被阻止(已运行),则不会再次触发。当一个动画完成时,它会运行队列中的下一个(如果没有剩余,则取消阻止)。我不想为您编写所有代码,但这可能会给您一个好主意。使用队列的解决方案很有趣。。。但如何实施……)@Sobakinet,每次鼠标进入任何
.my\u元素时,您似乎都在为所有.content
元素设置动画。这是设计的,还是有一个$(this).在实际代码中查找(“.content”)
或$(“.content”,this)
?(也许我误解了你的问题,但你说的是五个动画,所以我不确定……)不,我正在制作$(这个)。查找('.content'),对不起,jQuery核心中没有:悬停选择器。你是在使用插件来提供这个功能吗?评论不错,我没想到。您可以缓存触发live函数的最后一个元素,但这可能不是最佳解决方案。