簡體   English   中英

mousemove自動觸發IE 9

[英]mousemove is fired automatically IE 9

我在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");
        });

在鼠標移動了一定的最小距離后,您應該只是開始拖動。 為此,在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");
    });

僅供參考,一些鼠標可以記錄非常非常微小的動作(屏幕上不到一個像素),因此鼠標按下鼠標后可能實際上移動了,IE可能只是報告該動作。 其他瀏覽器可能會等到鼠標移動整個像素。 在任何情況下,如果您需要最小移動像素數,那么您將不會遇到此問題。

因為用激光鼠標移動鼠標是如此微小,所以我改變了你的方法,以便更好地適應我需要監控天氣或不移動鼠標的事實:

$(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事件持續發射,坐標也不會改變,除非您實際移動鼠標。 我用它來弄清楚鼠標移動與否的天氣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM