網站搜尋

javascript - 移除與節流函數一起使用的滾動事件監聽器


我有一個函數,我稱之為 在我的頁面上打開特定視圖。

function dayViewOpen(target){
         var date = getDate();
          ..
          ..
          ..
        document.addEventListener('scroll',throttle(function(event){
            scrollAddData(date);
        },10));
}

同樣地,我有一個函數來關閉那個特定的視圖

 function dayViewClose(target){
        ..
        ..


    }

到目前為止一切運作都很完美。 但當我必須移除先前新增的事件監聽器時,問題開始出現。也就是說,當我呼叫函式 dayViewclose(); 時,我必須移除事件監聽器。

我明白我們需要有一個 對監聽器的參考 才能移除它,所以當我這麼做的時候。

var handler = throttle(function(event){
                scrollAddData();
            },10);

 function dayViewOpen(target){
         var date = getDate();
          ..
          ..
          ..
        document.addEventListener('scroll',handler,false);
}

 function dayViewClose(target){
        ..
        ..

        //remove earlier added event listener
       document.removeEventListener('scroll',handler,false);
    }
  • 那麼我無法將 date 參數傳遞給我的處理器(我如何將 date 參數傳遞給處理器)並且
  • 即使我放開日期參數,我仍然無法使用 removeEventListener 移除處理程序。(我該如何正確移除事件監聽器)

任何幫助都將不勝感激

答案#1

你可以嘗試在外部宣告事件監聽器,但在內部設置它:

var handler;

function dayViewOpen(target){
    var date = getDate();
    /* ... */
    handler = throttle(function(event){
        scrollAddData(date);
    }, 10);
    document.addEventListener('scroll', handler, false);
}

function dayViewClose(target){
    /* ... */
    document.removeEventListener('scroll', handler, false);
}