我需要在调整浏览器大小后删除我的事件侦听器。我试过这样的事情:调整大小后删除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你能解释一下更多关于你在说什么,也许作为答案? –