SORU
1 Kasım 2010, PAZARTESİ


jQuery: mousemove olay sırasında fare düğmesini basılı Tespit

-Eğer herhangi bir kullanıcı sırasında basılması mousemove olayı düğmesine algılamak için jQuery altında çalıştım, ama belirsiz sonuçlar alıyorum:

no button pressed:      e.which = 1   e.button = 0
left button pressed:    e.which = 1   e.button = 0
middle button pressed:  e.which = 2   e.button = 1
right button pressed:   e.which = 3   e.button = 2

Kod:

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>

<input id="whichkey" value="type something">
<div id="log"></div>
<script>$('#whichkey').bind('mousemove',function(e){ 
  $('#log').html(e.which   ' : '    e.button );
});  </script>

</body>
</html>

Nasıl sol fare düğmesini basılı ve düğmesini hiç arasındaki farkı söyleyebilir miyim?

CEVAP
30 Mayıs 2011, PAZARTESİ


Kod biraz sola durumunu takip fare düğmesini tutun yazabilirsiniz, ve küçük bir fonksiyon-işlem öncesi olay değişken mousemove durumunda.

LMB durumunu takip etmek, mousedown mouseup düzey belge ve e.which veya bayrak temizlemek için kontrol etmek için bir olaya bağlamak.

Ön işleme benim kod tweakMouseMoveEvent() işlevi tarafından yapılır. IE sürümleri desteği < 9, eğer öyleyse eğer fare düğmeleri pencerenin dışında ortaya çıktığını kontrol edin ve bayrak temizlemeniz gerekir. Sonra geçti olay değişkeni değiştirebilirsiniz. Eğer e.which özgün 1 (hiçbir düğme veya LMB) ve mevcut durumu sol düğme basılı değil, sadece set e.which 0 ve kullanan kalanı senin mousemove olay kontrol etmek için herhangi bir düğme basılı.

Benim örnekte mousemove işleyicisi sadece çimdik işlevi ile güncel olay değişken geçirmeden aramaları e.which değerini verir.

$(function() {
    var leftButtonDown = false;
    $(document).mousedown(function(e){
        // Left mouse button was pressed, set flag
        if(e.which === 1) leftButtonDown = true;
    });
    $(document).mouseup(function(e){
        // Left mouse button was released, clear flag
        if(e.which === 1) leftButtonDown = false;
    });

    function tweakMouseMoveEvent(e){
        // Check from jQuery UI for IE versions < 9
        if ($.browser.msie && !e.button && !(document.documentMode >= 9)) {
            leftButtonDown = false;
        }

        // If left button is not set, set which to 0
        // This indicates no buttons pressed
        if(e.which === 1 && !leftButtonDown) e.which = 0;
    }

    $(document).mousemove(function(e) {
        // Call the tweak function to check for LMB and set correct e.which
        tweakMouseMoveEvent(e);

        $('body').text('which: '   e.which);
    });
});

Canlı bir demo burada deneyin: http://jsfiddle.net/G5Xr2/

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • gsipek

    gsipek

    20 Temmuz 2007
  • Kingsimba357

    Kingsimba357

    7 NİSAN 2008
  • michellefeng's channel

    michellefeng

    26 Kasım 2006