私はjavascriptの初心者で、次の問題に遭遇しています。これは、複数回検索した後、以前の回答で見つけることができませんでした(これが重複していないことを願っています)。
次のモジュール/クラスがあります。画面上でドラッグできるコンポーネントを実装しようとしているとしましょう。ユーザーが最初にクリックすると、のmousemove
イベントをリッスンしてwindow
、ユーザーがマウスを動かしている場所を認識し始めます。ユーザーがマウスを離したら、ウィンドウのイベント リスナーを削除します。コードは非常に簡単で、iife の外でコーディングするだけで機能します。ただし、現在、removeEventListener
単に機能しません。clousure、スコープなどと関係があるのではないかと思いますが、完全に見逃しています。よろしくお願いします。コードは次のとおりです。
MyClass.js
var myNamespace = myNamespace || {};
(function(myNamespace){
var onMouseDragDown = function(e){
window.addEventListener("mousemove", onMouseDragMove,true);
window.addEventListener("mouseup", onMouseDragUp,false);
};
var onMouseDragUp = function(e){
// This code executes, but the events CONTINUE to be triggered after removing the event listener
//The following lines do not seem to have any effect whatsoever even though they are executed when the user releases the mouse button
window.removeEventListener("mousemove", onMouseDragMove, true);
window.removeEventListener("mouseup", onMouseDragUp,false);
};
var onMouseDragMove = function(e){
console.log('moving');
};
myNamespace.MyClass = function(param){
this._param = param;
this._div = document.createElement('div');
this._div = ....
this._div.addEventListener('mousedown', onMouseDragDown.bind(this), false);
}
myNameSpace.MyClass.prototype.getDiv = function (){
return this._div;
}
)(myNameSpace);
索引.html
...
function onCreateNewDocumentClicked(event){
var myObject = new myNamepace.MyClass(someParams);
document.body.appendChild(mdi.getDiv());
}