Ben*_*Ben 13 jquery animation bind unbind
我将锚标记<a class="next">next</a>制作成"按钮".有时,如果没有新的内容可以显示,则需要隐藏此标记.如果我只是用.hide()隐藏按钮并使用.show()重新显示它,一切正常.但我想使用.fadeIn()和.fadeOut()代替.
我遇到的问题是,如果用户在fadeOut动画期间点击按钮,它可能会导致我运行该节目的逻辑出现问题.我找到的解决方案是在原始单击函数开始后从按钮解除绑定事件,然后在动画完成后重新绑定它.
$('a.next').click(function() {
$(this).unbind('click');
...
// calls some functions, one of which fades out the a.next if needed
...
$(this).bind('click');
}
Run Code Online (Sandbox Code Playgroud)
上面例子的最后一部分不起作用.click事件实际上并未重新绑定到锚点.有谁知道完成这个的正确方法?
我是一个自学成才的jquery家伙,所以像unbind()和bind()等一些更高级的东西都在我脑海里,而jquery文档对我来说并不是很简单.
nic*_*ckf 15
我只想添加一个检查,看看它是否先制作动画:
$('a.next').click(function() {
if (!$(this).is(":animated")) {
// do stuff
}
});
Run Code Online (Sandbox Code Playgroud)
重新绑定点击事件时,您将从头开始.您需要提供要处理事件的函数.在你打电话给"unbind"之后,jQuery不会为你记住它们.
在这种特殊情况下,它有点复杂.问题在于,当您启动这些动画时,您将启动一系列由计时器驱动的动作.因此,解锁和重新绑定点击处理程序本身内的"click"处理程序实际上无济于事.什么会有所帮助(假设你不想用is(":animated")技巧解决问题)将取消绑定处理程序,然后重新绑定动画中的"完成"回调.
当您首先设置"单击"处理程序时,您可以将函数的声明与对"click()"的调用分开:
var handler = function() {
$(this).whatever();
};
$('a.next').click(handler);
Run Code Online (Sandbox Code Playgroud)
然后,如果您最终想要取消绑定/重新绑定,您可以重复该调用以"单击"并以相同的方式引用"处理程序"功能.
| 归档时间: |
|
| 查看次数: |
17230 次 |
| 最近记录: |