0

イベントで変数を機能させる方法を理解するのに苦労しています.onmouseup

.onmousemoveたとえば、マウスが移動した距離などのローカル変数を定義するイベントがあります.onmousedown。を実行する関数でその情報を使用したいのですが.onmouseup、取得できません。関連するコードは次のとおりです。

document.onmousedown = function(){
   var mouseStart = [event.pageX,event.pageY];
   document.onmousemove = function(){
       var dist = Math.sqrt(Math.pow(event.pageY-mouseStart[1],2)+Math.pow(event.pageX-mouseStart[0],2));
       document.onmouseup = function() {
          global_function(dist);
          document.onmousemove = null;
      }
   }
}

アクセスできる理由がわかりませんmouseStartが、dist is undefined というエラーが表示されます。

中に再定義できない他の変数も渡す必要があります.onmouseup

4

3 に答える 3

0

私はそれを次のように変更しましたが、うまくいきました:

document.onmousedown = function (evt) {
    var e = evt || window.event;
    var mouseStart = [e.pageX, e.pageY];
    document.onmouseup = function (ev) {
        var evnt = ev || window.event;
        var dist = Math.sqrt(Math.pow(evnt.pageY - mouseStart[1], 2) + Math.pow(evnt.pageX - mouseStart[0], 2));
        alert(dist);
        document.onmouseup = null;
    };
};

ご覧のとおり、イベントを削除しonmousemoveましたが、それでも同じ結果で機能します。

于 2014-01-30T16:00:20.327 に答える
0

onmousedown ハンドラー内に onmouseup イベント ハンドラーを追加する必要があると思います。一部のブラウザーでは、mousemove イベントが毎秒 50 回程度発生するため、マウスのアップ/ダウン イベントを繰り返し追加および削除します。dist次に、mousedown ハンドラー内で宣言します。

ブラウザーの互換性のために、eventオブジェクトは多くのブラウザーでイベント ハンドラーに渡され、他のブラウザーではグローバル変数として渡されます。event = window.event || eventハンドラーへの引数の宣言と組み合わせた単純な方法でeventうまくいきます。

document.onmousedown = function(event) {
    event = window.event || event;
    var mouseStart = [event.pageX,event.pageY];
    var dist;

    document.onmouseup = function() {
        global_function(dist);
        document.onmousemove = null;
    };

    document.onmousemove = function(ev) {
        ev = window.event || ev;
        dist = Math.sqrt(Math.pow(ev.pageY-mouseStart[1],2)+Math.pow(ev.pageX-mouseStart[0],2));
    };
};
于 2014-01-30T15:56:06.697 に答える