问题是我无法从eventListener中删除一个函数。我在课堂上有以下方法:
setNavigator(NAV){renderNavigatorGraphic(nav.querySelector( “画布”));
var span = …
问题是我试图删除“eventHandler”函数,但我需要删除“move”,“risizeleft”和“resizeright”函数。为了解决这个问题,我创建了一个具有当前函数名称的变量,并在需要时将其从“move”事件中删除。
setNavigator(nav){ renderNavigatorGraphic(nav.querySelector("canvas")); var span = nav.querySelector(".graphic-overview > .selector > span"), selectorWidth = this.selectorWidth = span.clientWidth, selectorBorder = this.selectorBorder = parseFloat( getComputedStyle(span, "::before") .getPropertyValue("border-left-width") ), eventNames = (isMobileDevice()) ?["touchstart", "touchmove", "touchend"] :["mousedown", "mousemove", "mouseup", "mouseleave"], functionHandler; span.addEventListener(eventNames[0], eventHandler, false); span.addEventListener(eventNames[2], removeEventHandler, false); if(eventNames[3]) span.addEventListener(eventNames[3], removeEventHandler, false); function resizeleft(){console.log("left");} function resizeright(){console.log("right");} function move(){console.log("move");} function renderNavigatorGraphic(canvas){ console.log(canvas) } function eventHandler(e){ var x = e.offsetX, eventName = eventNames[1]; if(x > selectorBorder){ if(x < (selectorWidth - selectorBorder)){ functionHandler = move; }else{ functionHandler = resizeright; } }else{ functionHandler = resizeleft; } span.addEventListener(eventName, functionHandler, false); } function removeEventHandler(){ span.removeEventListener(eventNames[1], functionHandler); } function isMobileDevice() { return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); }; }
如果这是您要删除的两个事件
span.addEventListener(eventNames[2], removeEventHandler, false); if(eventNames[3]) span.addEventListener(eventNames[3], removeEventHandler, false);
那你需要打电话 .removeEventListener('event', namedFunction, options) 代替 .addEventListener(event, namedFunctions, options) 重要的是,您只能从事件侦听器中删除命名函数,如果我没记错的话,您无法删除正在处理事件的匿名函数
.removeEventListener('event', namedFunction, options)
.addEventListener(event, namedFunctions, options)