Wie kann das Scrollen mit der Maus vom programmgesteuerten Scrollen in JavaScript unterschieden werden?

8

Ich scrollte den Inhalt eines überlaufenden DIVs, indem ich die Eigenschaft scrollLeft in Javascript ändere:

%Vor%

Ich möchte dies jedoch stoppen, sobald der Benutzer den Inhalt selbst mit der Maus scrollt. Ich habe versucht, dies mithilfe des Scroll-Ereignisses zu erkennen

%Vor%

jedoch löst mein automatisches Scrollen oben auch dieses Ereignis aus. Wie kann ich das unterscheiden und nur auf vom Benutzer initiiertes Scrollen reagieren? (oder: Wie kann ich den obigen Code daran hindern, ein Scroll-Ereignis auszulösen? Das würde auch den Trick bewirken)

    
travelboy 24.08.2011, 16:19
quelle

4 Antworten

5

Sie können die Funktion .hover () verwenden, um den Bildlauf zu stoppen, wenn sich die Maus über dem Bildlauffeldelement befindet:

Ссылка

%Vor%

Bearbeiten

Basierend auf deinen Kommentaren habe ich ein jquery-Plugin von der folgenden Seite gefunden: spezielle Schriftrolle Ereignisse für jquery .

Dieses Plugin enthält ein Ereignis, das basierend auf dem Zeitraum zwischen dem letzten Bildlaufschritt und dem Zeitpunkt der Überprüfung ermittelt, ob das Bildlauf angehalten wurde.

Damit dies funktioniert, musste ich das Intervall auf etwas mehr als die vom Plugin verwendete Latenz verlangsamen, was 310 Millisekunden betrug. Dadurch musste ich den Scroll-Schritt erhöhen, damit er sich sichtbar bewegt.

Hier ist der Link:

Ссылка

und hier ist der Code:

%Vor%

Hoffe, das hilft.

    
jdavies 24.08.2011, 16:43
quelle
2

Für FF (Mozilla):

document.addEventListener('DOMMouseScroll', handler, false);

Für IE, Opera und Chrome:

document.onmousewheel = handler;

    
ZenMaster 24.08.2011 16:46
quelle
0

Eine weitere Option besteht darin, ein externes Flag zu haben, das Sie vor dem programmatischen Scrollen setzen und danach zurücksetzen können. Wenn das Bildlaufereignis ausgelöst wird und dieses Flag nicht gesetzt ist, wissen Sie, dass der Benutzer verantwortlich ist und entsprechend handeln kann.

Leider ist dies zwar Browser-unabhängig und leicht zu lesen, aber Sie könnten glauben, dass einige Benutzer-Scrolls programmatisch sind. Allerdings würde ich denken, dass das Vorkommen davon gering ist und sich je nach der App, die Sie schreiben, lohnen könnte.

    
Rontologist 24.08.2011 16:49
quelle
0
___ answer7179223 ___

Eine weitere Option besteht darin, ein externes Flag zu haben, das Sie vor dem programmatischen Scrollen setzen und danach zurücksetzen können. Wenn das Bildlaufereignis ausgelöst wird und dieses Flag nicht gesetzt ist, wissen Sie, dass der Benutzer verantwortlich ist und entsprechend handeln kann.

Leider ist dies zwar Browser-unabhängig und leicht zu lesen, aber Sie könnten glauben, dass einige Benutzer-Scrolls programmatisch sind. Allerdings würde ich denken, dass das Vorkommen davon gering ist und sich je nach der App, die Sie schreiben, lohnen könnte.

    
___ qstnhdr ___ Wie kann das Scrollen mit der Maus vom programmgesteuerten Scrollen in JavaScript unterschieden werden? ___ answer7179178 ___

Für FF (Mozilla):

%code%

Für IE, Opera und Chrome:

%code%

    
___ tag123javascript ___ JavaScript (nicht zu verwechseln mit Java) ist eine dynamische Sprache mit mehreren Paradigmen auf hoher Ebene, die sowohl für das clientseitige als auch für das serverseitige Scripting verwendet wird. Verwenden Sie dieses Tag für Fragen zu ECMAScript und seinen verschiedenen Dialekten / Implementierungen (außer ActionScript und Google-Apps-Script). ___ answer7179157 ___

Sie können die Funktion .hover () verwenden, um den Bildlauf zu stoppen, wenn sich die Maus über dem Bildlauffeldelement befindet:

Ссылка

%Vor%

Bearbeiten

Basierend auf deinen Kommentaren habe ich ein jquery-Plugin von der folgenden Seite gefunden: spezielle Schriftrolle Ereignisse für jquery .

Dieses Plugin enthält ein Ereignis, das basierend auf dem Zeitraum zwischen dem letzten Bildlaufschritt und dem Zeitpunkt der Überprüfung ermittelt, ob das Bildlauf angehalten wurde.

Damit dies funktioniert, musste ich das Intervall auf etwas mehr als die vom Plugin verwendete Latenz verlangsamen, was 310 Millisekunden betrug. Dadurch musste ich den Scroll-Schritt erhöhen, damit er sich sichtbar bewegt.

Hier ist der Link:

Ссылка

und hier ist der Code:

%Vor%

Hoffe, das hilft.

    
___ tag123jquery ___ jQuery ist eine beliebte Cross-Browser-JavaScript-Bibliothek, die das DOM-Traversal (Document Object Model), die Ereignisbehandlung, Animationen und AJAX-Interaktionen erleichtert, indem die Diskrepanzen zwischen Browsern minimiert werden. Eine mit jQuery gekennzeichnete Frage sollte mit jquery in Zusammenhang stehen, daher sollte jquery von dem fraglichen Code verwendet werden, und mindestens eine jquery-nutzungsbezogene Elemente müssen in der Frage enthalten sein. ___ tag123javascriptevents ___ BENUTZEN SIE DIESEN TAG NICHT! JavaScript hat keine Ereigniskonstrukte. Benutze [dom-events], [jquery-events], [backbone-events]; oder Bibliothek / Umgebung + [Ereignisse] z.B. [node.js] + [Ereignisse] ___ qstntxt ___

Ich scrollte den Inhalt eines überlaufenden DIVs, indem ich die Eigenschaft scrollLeft in Javascript ändere:

%Vor%

Ich möchte dies jedoch stoppen, sobald der Benutzer den Inhalt selbst mit der Maus scrollt. Ich habe versucht, dies mithilfe des Scroll-Ereignisses zu erkennen

%Vor%

jedoch löst mein automatisches Scrollen oben auch dieses Ereignis aus. Wie kann ich das unterscheiden und nur auf vom Benutzer initiiertes Scrollen reagieren? (oder: Wie kann ich den obigen Code daran hindern, ein Scroll-Ereignis auszulösen? Das würde auch den Trick bewirken)

    
___ tag123scroll ___ Scrolling bezieht sich auf das kontinuierliche Verschieben von Inhalten über einen Bildschirm. ___ antwort43372110 ___

Probieren Sie Wheel Event für die meisten modernen Browser

aus
  

Das Wheel-Ereignis wird ausgelöst, wenn eine Wheel-Taste eines Zeigegeräts (normalerweise eine Maus) gedreht wird.

    
___
Nir Soudry 12.04.2017 14:14
quelle