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事件,我会在一秒钟内举个例子是的,我发现这就是它不起作用的原因:)但是你不必再举一个例子,因为我能够自己解决这个问题,感谢你所有的评论,这为我指明了正确的方向!!