Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.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 - Fatal编程技术网

Javascript jQuery+;停止+;回调函数

Javascript jQuery+;停止+;回调函数,javascript,jquery,Javascript,Jquery,据我所知,使用.stop()可以防止回调函数启动,对吗 不幸的是,这在我当前的脚本中似乎不起作用: newSubMenu.stop().slideToggle(250, function() { newSubMenu.css('visibility', 'visible').addClass('open'); }); 现在,双击时动画停止,但newSubMenu仍然会打开类open,我不知道为什么 我试图实现的目标是在动画完成之前不应用类open。来自: 当对元素调用.stop()时,当前

据我所知,使用
.stop()
可以防止回调函数启动,对吗

不幸的是,这在我当前的脚本中似乎不起作用:

newSubMenu.stop().slideToggle(250, function() {
  newSubMenu.css('visibility', 'visible').addClass('open');
});
现在,双击时动画停止,但
newSubMenu
仍然会打开类
open
,我不知道为什么

我试图实现的目标是在动画完成之前不应用类
open

来自:

当对元素调用
.stop()
时,当前运行的动画(如果有)将立即停止…不调用回调函数

如果
stop()
的第三个参数为
true
,则调用回调函数

但是,在您提供的代码中,回调将运行,因为您正在停止已经运行的动画,而不是调用
stop()
时尚未运行的
slideToggle()
动画


下面是一个。

要了解为什么会发生这种情况,您必须了解切换的作用。 每次单击时,
slideToggle
都会将信息保存到
slideDown
slideUp

结论是:每次切换完成后,您的函数都将被调用,您的newSubMenu将获得
可见性:visible
样式,如果它不存在,还将添加类
“open”

Click-> Stop all animations on element -> toggle slide -> call/excecute function
.stop()
可用于停止当前正在运行的动画。动画完成后,将执行回调。为了停止当前动画并避免调用回调,您需要执行以下操作:

newSubMenu.mouseover(function(){
    newSubMenu.slideToggle(250, function(){
        $(this).css('visibility', 'visible').addClass('open');
    });
}).dblclick(function(){

    // this will stop the execution of the .slideToggle animation
    // whitch will prevent the callback from being executed
    newSubMenu.stop();

});
jQuery在1.8版中添加了一个“始终”回调:

始终

类型:函数(Promise动画、Boolean jumpedToEnd)

动画完成或停止时调用的函数 完成(其承诺对象已解决或被拒绝)。 (新增版本:1.8)

网址:


如果定期制作动画或使用
stop()

@Andrej中断动画,则始终会触发此命令。我已编辑了我的答案,以添加指向显示已停止回调的工作示例的链接。感谢您的努力,但作为一名新手,我真的不知道如何在脚本中使用此命令。如果我要求您尝试向我展示如何在我的脚本中实现这一点,这是否太过分了?我试着把
newSubMenu.stop()slideToggle()
函数前面的code>,但显然它不是这样工作的。就像这样:我发现了:)我甚至不确定这是否是因为你的答案,但效果现在正是我想要的。它很简单:我现在在
.css()
上这样做,而不是在
slideToggle()调用stop:
newSubMenu.stop().css('visibility','visible').addClass('open')
这样,双击只会打开菜单一次。这正是我一直在寻找的:)不管怎样,我都会为你的答案做标记,因为它为我指明了正确的方向!再次感谢!这是可行的,但我不希望它在悬停时滑动,而是在单击时滑动。从
mouseover
更改为
click
,它不会停止:/我可能只是不明白你的答案背后的意思,但在我的脚本中简单地使用它是行不通的。@Andrej你必须记住,当你双击时,你也会触发一个click事件,我会在一秒钟内举个例子是的,我发现这就是它不起作用的原因:)但是你不必再举一个例子,因为我能够自己解决这个问题,感谢你所有的评论,这为我指明了正确的方向!!