1

IE 9 で問題が発生しています (8 はテストしていません)。コードが行うべきことは、特定の要素をクリックした後にマウスがドラッグされたかどうかを検出することです。問題は、マウスを動かさなくても、IE 9 が自動的に $(window).mousemove イベント ハンドラーに入ることです。Chrome と FF で正常に動作します。

   $(Element).mousedown(function() {
            $(window).mousemove(function() {
                isDragging = true;
                $(window).unbind("mousemove");
            });
        }).mouseup(function() {
            $(window).unbind("mousemove");
        });
4

2 に答える 2

3

マウスが特定の最小距離を移動した後でのみ、ドラッグを開始する必要があります。これを行うには、mousedownハンドラーでマウスの位置を記録してから、mousemoveで、マウスが最小距離を移動したときにのみドラッグを開始します。

    $(Element).mousedown(function(e) {
        var x = e.clientX;
        var y = e.clientY;
        var minMovement = 3;
        $(window).mousemove(function(e) {
            if (Math.abs(e.clientX - x) > minMovement || Math.abs(e.clientY - y) > minMovement) {
                isDragging = true;
                $(window).unbind("mousemove");
            }
        });
    }).mouseup(function() {
        $(window).unbind("mousemove");
    });

参考までに、一部のマウスは非常に小さな動き(画面上の1ピクセル未満)を記録できるため、マウスを押した後にマウスが実際に動く可能性があり、IEはおそらくその動きを報告しているだけです。他のブラウザは、マウスがピクセル全体を移動するまで待機する場合があります。いずれにせよ、最小数のピクセルの移動が必要な場合は、この問題は発生しません。

于 2012-09-20T04:09:59.990 に答える
0

レーザーマウスではマウスの動きが非常に小さいため、マウスが動いているかどうかを天気だけで監視する必要があるため、方法を少し変更しました。

$(window).mousemove(function (e) {
    var smallNo = 0;
    var x = e.clientX;
    var y = e.clientY;
    var minMovement = 1;
    if ((x - smallNo) > minMovement || (y - smallNo) > minMovement) {
        countDownTime = logoutTime;
    }
});

mousemove イベントは常に発生していますが、マウスを物理的に動かさない限り、座標は変わりません。私はそれを使って天気を調べ、マウスが動いたかどうかを調べました。

于 2013-03-19T11:17:58.957 に答える