2014-02-06 28 views
0

我有一個類,我通過撥打:停用JavaScript頁面級事件處理程序

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)); 
+2

答案將取決於'gd.InfiniteScroll'類是否有從頁面上脫落的能力。 – Alnitak

+0

使用removeClass() – agconti

+0

庫支持它嗎?檢查api。 – epascarello

回答

0

只要給你的類「禁用」的方法需要,你可以調用:

p.deactivate = function() { 
    $(window).off('scroll'); 
}; 

如果要完全與對象,你也可以delete this.infiniteScroll允許垃圾回收器回收內存完成,但考慮到這個班級的記憶力很小,這樣做的好處不大。

注:理想情況下,你應該「命名空間」的事件處理程序,讓您可以單獨停用處理任何其他人,例如:

$(window).on('scroll.infinite', ...); 

,隨後:

$(window).off('scroll.infinite'); 
+0

謝謝,這工作。你可以進一步瞭解關於命名空間的更多細節。我試圖將其與我的代碼整合,但它無法正常工作。 – panthro

+0

這是在jQuery文檔 - http://api.jquery.com/on/ – Alnitak

+0

downvoter,請解釋一下嗎? – Alnitak

2

通常你可以只delete this.infiniteScroll。但我認爲在這種情況下,它實際上附加了一些事件處理程序,這意味着這是不夠的。

如果庫編寫得很好,您可能會有一個方法來分離所有的事件處理程序,一個desctructor函數或類似的東西。

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

+0

是的,但是每次用戶滾動時它都會檢查此信息。 – panthro

+1

@panthro真的,但沒有其他方式修改插件。 – plalx

+0

這不是一個插件。它的代碼是寫的,所以可以修改我想要的一切。 – panthro