2013-06-22 6 views
10

Mam krótki skrypt, który szlak śledzenie kursora:wykonać Jquery, gdy wskaźnik myszy zatrzyma się

jQuery(document).ready(function(){ 
    $(document).mousemove(function(e){ 
     $('.fall').each(function(){ 
      if ($(this).css("opacity") == 0){ 
       $(this).remove(); 
      }; 
     }); 
     t = (e.pageY - 10).toString() + 'px'; 
     l = (e.pageX - 10).toString() + 'px'; 
     $('.fall').css("margin_left",l); 
     $('.fall').css("margin_top",t); 
     var doit = '<div class="fall" style="position:fixed;margin-left:' + l + ';margin-top:' + t + ';">+</div>' 
     $('body').prepend(doit); 
     $('#status2').html(e.pageX +', '+ e.pageY); 

     $('.fall').animate({ 
      marginTop: '+=50px', 
      opacity: 0 
     },1000);  
    }); 
}); 

Teraz chciałbym, aby usunąć animate udział i mieć coś jak następuje, gdy mysz nie jest przenoszenie:

$('.fall').each(function(){ 
    $(this).fadeOut('slow'); 
    $(this).remove() 
}); 

Po prostu nie mogę dowiedzieć się, jak to zrobić, gdy mysz nie porusza się dłużej niż przez sekundę. Jakieś pomysły?

Dzięki, a here is a jsfiddle

+0

Zaktualizować każdym razem jest przenoszony i użyć setTimeout var 'mouseLastMoved' aby sprawdzić, że' teraz> mouseLastMoved + x seconds'? – Popnoodles

+0

Nie bardzo rozumiem, czego chcesz, ale zaktualizowałem go, aby użyć nowego kodu: http://jsfiddle.net/wVVbT/9/ - czy to pomaga? – Joe

+0

Potrzebuję tej linii, aby wykonać, gdy mysz przestanie się poruszać ... więc zaktualizowany kod, który właśnie wysłałeś, nie jest tym, co chcę –

Odpowiedz

4

czy tego potrzebujesz? jsFiddle

lastTimeMouseMoved = new Date().getTime(); 
var t = setTimeout(function() { 
    var currentTime = new Date().getTime(); 
    if (currentTime - lastTimeMouseMoved > 1000) { 
    $('.fall').fadeOut('slow'); 
    // $('.fall').remove(); 
    } 
}, 1000) 
+0

To jest prawie idealne !! Właśnie o to chodzi ... ale nie znika, po prostu zostaje usunięty –

+0

możesz dokonać drobnej zmiany, aby to zrobić ... – Varun

+0

just comment // $ ('. Fall'). Remove(); to zrobi – Varun

13

dodać timeout odpala po jednej sekundzie bezczynności i usunąć limit czasu, gdy porusza się mysz w ciągu 1 sekundy itp:

var timer; 
$(document).on('mousemove', function(e){ 
    clearTimeout(timer); 

    timer = setTimeout(function() { 
     $('.fall').fadeOut('slow', function() { 
      $(this).remove(); 
     }); 
    }, 1000); 
}); 

FIDDLE

EDYCJA:

Oto jak to zrobić

FIDDLE

+0

Celem jest sprawienie, aby zanikały po zatrzymaniu. To nie robi tego, po prostu sprawia, że ​​przestaje się rysować. a potem nie możesz zacząć od nowa ... –

+0

@RyanSaxe - Ale czy już nie znikają? W każdym razie, zredagowałem odpowiedź, tę samą zasadę dla wykrycia, kiedy mysz zatrzymała się na sekundę itd. – adeneo

+1

@adeneo - Myślę, że oni chcą czegoś takiego: http://jsfiddle.net/wVVbT/13/ - wszystko, co muszą robić aby twój działał tak, jak chce, jest usunięcie kilku linii w ich pierwotnej funkcji. – Joe