我有一个课程,我打电话来:
this.infiniteScroll = new gd.InfiniteScroll();
在此课程中,它会检查用户是否在窗口底部。
稍后在我的脚本中,我没有使用这个无限滚动脚本(因为所有数据都已加载)。我该如何删除它?或者阻止它检查用户是否在窗口底部?
这是无限滚动类:
(function(){
"use strict";
var InfiniteScroll = function() {
this.init();
};
var p = InfiniteScroll.prototype = gd.BaseClass.extend(gd.BaseClass);
p.BaseClass_init = p.init;
/*
* Public properties
*/
p.canLoad = true;
p.cog;
/*
* Public methods
*/
p.init = function() {
// Super
this.BaseClass_init();
// Init
this.ready();
};
p.ready = function() {
this._initInfiniteScroll();
};
p.loadRequested = function(){
p.canLoad = false;
console.log('show cog');
$.event.trigger('loadRequested');
}
p.loadComplete = function(){
p.canLoad = true;
console.log('hide cog');
console.log(p.canLoad);
}
p._initInfiniteScroll = function() {
$(window).scroll(function(){
console.log('scroll!');
if(($(window).scrollTop() == ($(document).height() - $(window).height())) && p.canLoad){
p.loadRequested();
}
});
}
gd.InfiniteScroll = InfiniteScroll;
}(window));
答案 0 :(得分:2)
通常你可以delete this.infiniteScroll
。但我认为在这种情况下它实际上附加了一些事件处理程序,这意味着这还不够。
如果库写得很好,您可能会有一个方法来分离所有事件处理程序,析构函数或类似的东西。
答案 1 :(得分:0)
只需为您的课程提供一个“停用”方法,您可以根据需要调用该方法:
p.deactivate = function() {
$(window).off('scroll');
};
如果你完全使用了对象,你也可以delete this.infiniteScroll
允许垃圾收集器回收内存,但考虑到这个类占用的内存很少,这样做几乎没有什么好处。
注意:理想情况下,您应该“命名”事件处理程序,以便您可以独立于其他处理程序停用处理程序,例如:
$(window).on('scroll.infinite', ...);
然后随后:
$(window).off('scroll.infinite');
答案 2 :(得分:0)
如果不修改插件代码,您可以这样做:
this.infiniteScroll.canLoad = false;
编辑:
现在我知道这是你自己的代码,你可以简单地跟踪你的监听器功能,并提供一个删除监听器的破坏机制。
p._initInfiniteScroll = function() {
$(window).scroll(this._scrollHandler = function(){
console.log('scroll!');
if(($(window).scrollTop() == ($(document).height() - $(window).height())) && p.canLoad){
p.loadRequested();
}
});
}
p.destroy = function () {
$(window).off('scroll', this._scrollHandler);
//you should probably call the destruction function of the parent class
//if there's any.
};
然后只需致电this.infiniteScroll.destroy();