2

有两个 js 脚本绑定到$(window).scroll(). 在一个脚本(example1.js)中,当满足某些条件时,我需要取消绑定事件(或找到可接受的替代方案),但这会导致.scroll()事件完全解除绑定,从而删除所有功能。

我想做的是,一旦满足条件,停止为 example1.js 而不是为 example2.js 触发滚动事件。

例子1.js

function exampleFunction(self) {
    $(window).scroll(function () {
        if ($(window).scrollTop() >= $(document).height() - $(window).height() - 364) {
            self.start();
        }
    });

    $.ajax({
        url: self.settings.dataUrl,
        dataType: "json",
        async: false,
        cache: false,
        success: function (json) {
            if (json.data.length) {
                self.json = json;
                self.addImages();
            } else {
                $(window).unbind('scroll');
            }
        }
    });
}

例子2.js

$(window).scroll(function () {
    someFunction();
}); 
4

2 回答 2

2

看看命名空间事件。这将允许您为事件命名空间,然后仅取消绑定该命名空间,而其他绑定保持不变。

例如:

// Create Bindings //
$(window).bind('scroll.example1', function(e){
    ...
});

$(window).bind('scroll.example2', function(e){
    ...
});

// Unbind ONLY .example1 Namespace //
$(window).unbind('scroll.example1');

我希望这有帮助!

于 2012-09-04T20:22:20.643 回答
1

绑定事件时使用命名空间事件。

例子:

//bind click.a
$('.class').on('click.a', function(){ alert ('inside a space'); }); 
//bind click.b
$('.class').on('click.b', function(){ alert ('inside b space'); }); 

//unbind click.b
$('.class').off('click.b');

//trigger click.a
$('.class').trigger('click.a');

在你的情况下,

例子1.js

function exampleFunction(self) {
    $(window).on('scroll.e1', function () {  //bind scroll.e1
        if ($(window).scrollTop() >= $(document).height() - $(window).height() - 364) {
            self.start();
        }
    });

    $.ajax({
        url: self.settings.dataUrl,
        dataType: "json",
        async: false,
        cache: false,
        success: function (json) {
            if (json.data.length) {
                self.json = json;
                self.addImages();
            } else {
                $(window).unbind('scroll.e1'); //unbind scroll.e1
            }
        }
    });
}

例子2.js

$(window).on('scroll.e2', function () { //bind scroll.e2
    someFunction();
}); 
于 2012-09-04T20:22:49.957 回答