我需要在調整瀏覽器大小後刪除我的事件偵聽器。我試過這樣的事情:調整大小後刪除eventListeners
window.addEventListener('resize',() => {
const bp = this.breakpointInit.getValue();
if (bp === 'mobile') {
this.toggleMobile();
} else {
this.toggleDesktop();
}
});
}
toggleMobile() {
Array.prototype.forEach.call(this.elements, (el) => {
const activeClass = `${el.classList[0]}--active`;
el.addEventListener('touchstart', (e) => {
this.switchClass(e, el, activeClass);
});
el.removeEventListener('mouseenter', (e) => {
this.switchClass(e, el, activeClass);
});
el.removeEventListener('mouseleave', (e) => {
this.switchClass(e, el, activeClass);
});
});
}
toggleDesktop() {
Array.prototype.forEach.call(this.elements, (el) => {
const activeClass = `${el.classList[0]}--active`;
el.addEventListener('click', (e) => {
this.switchClass(e, el, activeClass);
});
el.addEventListener('mouseenter', (e) => {
this.switchClass(e, el, activeClass);
});
el.addEventListener('mouseleave', (e) => {
this.switchClass(e, el, activeClass);
});
el.removeEventListener('touchstart', (e) => {
this.switchClass(e, el, activeClass);
});
});
}
上述功能在需要時觸發,但事件偵聽器結轉。我做錯了什麼?
另外一個http://stackoverflow.com/questions/4402287/javascript-remove-event-listener的副本 – arthurakay
它實際上並不需要命名。例如,一個匿名函數可以放在一個數組中,並由該引用中的'.addEventListener'和'.removeEventListener'引用。只要你添加和刪除完全相同的函數實例,就可以。 –
@JonathanGray你能解釋一下更多關於你在說什麼,也許作爲答案? –