我有一个像这样的窗口滚动功能:
function fixDiv() {
//scroll script goes here
}
$(window).scroll(fixDiv);
现在我想取消点击按钮时的功能
$('button').on('click',function(){
//cancel the fixDiv() function
// I have tried this:
fixDiv != fixDiv; // and changed/set variable for fixDiv() like var fixDiv = function(){}
});
但似乎不起作用。有什么办法可以取消该功能。
(请注意:如果再次单击该按钮,应该会再次起作用)
<小时/>请阅读赏金说明。
最佳答案
尝试类似的事情:
$('button').on('click', function () {
this.off = !this.off;
$(window)[this.off?'off':'on']("scroll", fixDiv )
});
更新
现在,如果您想重写函数本身,可以使用以下代码:
//using anonymous function as handler, code inside is processing on the fly
$('#anchorAnonymous').on('click',function(){
fixDiv();
//any other code, still be called even fixDiv() is overrided...
});
//click to override fixDiv() function
$('#btnoverride').on('click', function () {
this.override = !this.override;
//$.noop = function(){} -> do nothing
fixDiv = this.override?$.noop:storedFixDiv;
});
//this is used to store fixDiv() function
window.storedFixDiv = fixDiv;
请注意,如果用作引用方法,重写函数不会重写处理程序。因为 jQuery 将为 $._data(elem,"events")
中存储的每个事件创建一个处理程序。
为了说明这一点,请参见 jsfiddle 中的差异:
关于jquery - 如何取消/放弃滚动功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20902374/