私はマウスイベントの知識を向上させようとしているので、この質問は、ドラッグアンドドロップモジュールを使用できるかどうかよりも、私が行っていることがうまくいかない理由についてです。
Dojoを使用していて、mousedownイベントとmouseupイベントに接続しました。右クリックではないmousedownイベントがある場合、mousemoveの接続を設定します。後続のmouseupイベントで、そのイベントを切断します。コードは次のようになります。EDIT(自己完結型の例にする必要があります)
obj = {
init: function(){
var c;
dojo.connect(dojo.doc, "mousedown", this, function(evt){
this.down(evt);
if(evt.button != dojo.mouseButtons.RIGHT){
this._isDown = true;
c = dojo.connect(dojo.doc, "mousemove", this, "drag");
}
});
dojo.connect(dojo.doc, "mouseup", this, function(evt){
dojo.disconnect(c);
this._isDown = false;
this.up(evt);
});
},//end init
drag: function(evt){
console.log("Mouse drag",evt);
},
up: function(evt){
console.log("Mouse up",evt);
},
down: function(evt){
console.log("Mouse down",evt);
}
}//end obj
編集:これを試すには、コンソールを使用して任意のページ(imgを使用)にdojoを挿入し、このobjを作成してobj.init()を実行します。1.5で注入:
document.documentElement.firstChild
.appendChild(document.createElement("script"))
.src='http://ajax.googleapis.com/ajax/libs/dojo/1.5/dojo/dojo.xd.js';
それは私には対称に見え、ドキュメントの大部分をクリックすると正常に機能します。ただし、アイコンをクリックしてドラッグすると、「ドラッグ」関数が1回だけ呼び出され(接続によって呼び出されるはずなので、カーソルを動かすたびに呼び出されます)、マウスを離してもmouseupイベントは呼び出されません。 。
次にマウスダウンすると、cが新しい接続で上書きされ、前の接続を切断できないようになります。したがって、ドラッグでのみアクティブにすることを意図していたものが永続的なイベントになります。
私が実装した悪い解決策は、「マウスダウン」接続で接続する前に切断することです。これにより、「ドラッグ」への永続的な呼び出しが発生しないようになりますが、もう一度クリックして設定を解除するまで、「ドラッグ」への不正な呼び出しが残ります。
なぜこれが起こっているのかについてのヒントはありますか?