javascript - Xóa bộ lắng nghe sự kiện Scroll được sử dụng kết hợp với hàm throttling
Tôi có một hàm mà tôi gọi mở một chế độ xem cụ thể trên trang của tôi.
function dayViewOpen(target){
var date = getDate();
..
..
..
document.addEventListener('scroll',throttle(function(event){
scrollAddData(date);
},10));
}
tương tự, tôi có một hàm để đóng chế độ xem cụ thể đó
function dayViewClose(target){
..
..
}
Mọi thứ cho đến bây giờ đều hoạt động hoàn hảo. Nhưng vấn đề bắt đầu xuất hiện khi tôi phải gỡ bỏ trình lắng nghe sự kiện đã thêm trước đó. Tức là tôi phải gỡ bỏ trình lắng nghe sự kiện khi tôi gọi hàm dayViewclose();
Tôi hiểu rằng chúng ta cần có tham chiếu đến người nghe để loại bỏ nó, vì vậy tôi làm như thế này.
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);
}
- thì tôi không thể truyền tham số date đến trình xử lý của tôi ( Làm thế nào để tôi truyền tham số date đến trình xử lý ) và
- Ngay cả khi tôi bỏ tham số ngày, tôi vẫn không thể gỡ trình xử lý bằng removeEventListener. (Làm thế nào để tôi có thể gỡ bỏ trình nghe sự kiện đúng cách)
Bất kỳ sự giúp đỡ nào cũng sẽ được trân trọng rất nhiều
Câu trả lời #1
Bạn có thể thử khai báo bộ lắng nghe sự kiện bên ngoài, nhưng đặt nó bên trong:
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);
}
