2013-07-15 102 views
2

我使用CreateJS/EaselJS创建画布示例。我有一个卡对象(位图对象),并添加了一个事件侦听器来处理“mousedown”事件。然后我尝试删除这个事件监听器,但它似乎不工作。谁能帮我?如何删除EaselJS对象中的事件侦听器

toggleDragDrop: function (stage, state) { 
      if (state) { 
       this.graphicsObj.addEventListener("mousedown", function (evt) { 
        var offset = { x: evt.target.x - evt.stageX, y: evt.target.y - evt.stageY }; 

        // add a handler to the event object's onMouseMove callback 
        // this will be active until the user releases the mouse button: 
        evt.addEventListener("mousemove", function (ev) { 
         ev.target.x = ev.stageX + offset.x; 
         ev.target.y = ev.stageY + offset.y; 
         stage.update(); 
        }); 
       }); 
      } 
      else { 
       this.graphicsObj.removeEventListener("mousedown"); 
      } 
     } 

回答

2

.removeEventListener()需要(或三个)参数,而不是一个。第二个参数是对传入.addEventListener()的同一个侦听器函数的引用。因此,如果您想稍后删除它,则不能使用带有.addEventListener()的匿名函数表达式。相反,使用命名函数,以便您可以在两个调用中参考它:

toggleDragDrop: function (stage, state) { 
    function downer(evt) { 
     var offset = { 
      x: evt.target.x - evt.stageX, 
      y: evt.target.y - evt.stageY 
     }; 

     // add a handler to the event object's onMouseMove callback 
     // this will be active until the user releases the mouse button 
     evt.addEventListener("mousemove", function (ev) { 
      ev.target.x = ev.stageX + offset.x; 
      ev.target.y = ev.stageY + offset.y; 
      stage.update(); 
     }); 
    } 

    if (state) { 
     this.graphicsObj.addEventListener("mousedown", downer); 
    } 
    else { 
     this.graphicsObj.removeEventListener("mousedown", downer); 
    } 
} 
+0

我明白了:D,非常感谢:D。 – PhuongTT

相关问题