如何取消/放弃滚动功能?

时间:2014-01-03 11:16:22

标签: jquery

我有一个像这样的窗口滚动功能:

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(){}
});

但似乎没有用。我可以用什么方法取消该功能。

(请注意:如果再次单击应该再次运行的按钮)


请阅读赏金说明。

4 个答案:

答案 0 :(得分:5)

尝试类似的东西:

DEMO

$('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的区别:

jsFiddle example

答案 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")
});

演示:http://jsfiddle.net/IrvinDominin/rqeW7/

答案 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;
    });
});