2012-08-23 19 views
5

Meine Seite hat einen scrollbaren Bereich, der eine Anzahl von Elementen enthält. Jedes Element löst beim Überfahren eine Funktion aus.Wie erkenne ich, wenn der Benutzer aktiv scrollt?

Mein Problem ist, dass, wenn der Benutzer mit dem Mausrad nach oben oder unten scrollt, die Funktion für jedes Element ausgelöst wird, das der Cursor übergibt, während der Bereich darunter scrollt.

Gibt es eine Möglichkeit, dass ich die Funktion triggern kann, wenn der Mauszeiger gerade nicht aktiv scrollt?

jQuery's eingebaute .scroll() scheint nicht das zu sein, was ich brauche, da das Scroll-Ereignis nur ausgelöst wird, wenn ein Scroll startet. Ich muss wissen, ob die Schriftrolle sozusagen "in Bearbeitung" ist.


UPDATE: Hier ist mein aktueller Code:

$container.find('div.item').each(function(i, e){ 
    $(e).hover(
      function(){ 
       $(this).toggleClass('expanded'); 
       // other functions here 
      }, 
      function(){ 
       $(this).toggleClass('expanded'); 
      } 
    ); 
}); 

Also, was ich tun möchte, ist zu deaktivieren alles in .hover() wenn der Benutzer gerade die Seite zu scrollen.

+0

Können wir dies auf Touchpad Scroll tun? – kapil

Antwort

3

würde ich die setTimeout mit einer fairen Zeit auf mouseenter verwenden und dann clearTimeout auf mouseleave, die auf dem schwebt eine kleine Verzögerung schaffen würden, so der Hover nur auslösen würde, wenn der Benutzer seine Maus über das Element für das hält Zeit einstellen.

Dies würde hoffentlich minimieren Sie Ihre Scroll-Problem. Es könnte eine bessere Lösung geben, aber es war das erste, woran ich dachte.

EDIT

schnell dieses Beispiel schrieb, sollte funktionieren:

$(function() { 
    "use strict"; 
    var $container = $("#container"), 
     timeout, self; 

    $container.find("div").each(function() { 
     $(this).hover(
      function() { 
       self = this; 
       timeout = setTimeout(function() { 
        $(self).css({ 
         width : 500, 
         height: 500 
        }); 
       }, 500); 
      }, 
      function() { 
       clearTimeout(timeout); 
       $(this).css({ 
        width : 300, 
        height: 300 
       }); 
      } 
     ); 
    }); 
}); 

Für eine Demo zu dieser Geige gehen: http://jsfiddle.net/sQVe/tVRwm/1/

Es liegt an Ihnen, wie viel von einer Verzögerung Sie Ich wollte 500ms.

HINWEIS

Die .each() nicht benötigt wird, können Sie sofort die .hover() auf der div Sammlung nennen. Ich habe .each() aufgenommen, weil ich nicht weiß, ob Sie mehr tun wollen, als nur das Hover-Ereignis zu binden.

+1

Cleveres Work-around. – Cypher

+0

Kann dies in Verbindung mit jQuerys '.hover()' funktionieren? Siehe das Update zu meiner Frage. – daGUY

+0

@daGUY Sicher kann, sehe meinen aktualisierten Beitrag. Implementiere das einfach in deinem Code. – sQVe

Verwandte Themen