Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery:等待函数完成_Javascript_Jquery_Function - Fatal编程技术网

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函数的最后一个元素,但这可能不是最佳解决方案。