我有一个像这样的窗口滚动功能:
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(){}
});
但似乎没有用。我可以用什么方法取消该功能。
(请注意:如果再次单击应该再次运行的按钮)
请阅读赏金说明。
答案 0 :(得分:5)
尝试类似的东西:
$('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的区别:
答案 1 :(得分:2)
您可以绑定/取消绑定事件,而不是使该功能无效。
代码:
function fixDiv() {
console.log('demo')
}
$(window).on('scroll', fixDiv);
$('button').on('click', function () {
if ($(this).hasClass("scroll")) {
$(window).off('scroll', fixDiv);
} else {
$(window).on('scroll', fixDiv);
}
$(this).toggleClass("scroll")
});
答案 2 :(得分:0)
var fixDiv = function(){
/*some code*/
}
$('button').on('click',function(){
fixDiv = function(){};
});
答案 3 :(得分:0)
您可以在document
对象上定义全局变量,并在按钮单击时切换其值。
像:
document.scrollFlag = true;
function fixDiv() {
if(document.scrollFlag) {
console.log("called");
}
}
$(document).ready(function() {
$(window).scroll(fixDiv);
$("#stopBtn").click(function() {
document.scrollFlag = !document.scrollFlag;
});
});