2013-07-15 5 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

Смежные вопросы