2014-02-24 10 views
6

Ich habe ein Problem. Für ein Projekt, das ich mache, erkenne ich die Scrollrad-Position und basierend darauf navigiere ich zur nächsten Folie oder nicht. Ein Problem besteht jedoch darin, dass einige Mac-Benutzer "natürliches Scrollen" verwenden, indem sie ihren Bildlauf auf Seiten umkehren. Dies bedeutet, dass ich für diese Benutzer Scroll in der anderen Richtung als Auslöser verwenden sollte.Javascript: erkennen OS X "natürliche Scroll" Einstellungen

Meine Frage ist; Gibt es eine Möglichkeit zu erkennen, in welche Richtung der Benutzer blättert? Meine ursprüngliche Idee war es, das Scrollen zu verfolgen und zu sehen, wie scrollTop und scrollwheel zueinander stehen (d. H. Ich zeichne Mausrad-Ereignisse auf und sehe, in welcher Richtung die Seite scrollt). Das erfordert jedoch, dass der Benutzer scrollt, bevor ich weiß, was zu tun ist. Was nicht funktioniert, da Benutzer zuerst einen Folienwechsel auslösen müssen.

Ich bin ratlos. Alle Hilfe wird geschätzt.

+0

Nur ein Gedanke: spielt es eine Rolle? Wenn Ihre Dias horizontal sind, ist es ziemlich seltsam, wenn das Scrollen nach oben nach links oder rechts erfolgt. Und denke daran: Ich schätze, Mac-Nutzer sollten unterschiedliche Scroll-Richtungen gewohnt sein (sie müssen sich ständig ändern, zB wenn sie einen PC in der Stadtbibliothek benutzen ...). Ich würde nicht zu viel Zeit damit verbringen, wenn ich du wäre;) – giorgio

+1

ein anderer Gedanke: invertiert nicht gerade mac Ereignisse, die ausgelöst werden? Der Browser würde also nichts darüber wissen, wie der Benutzer scrollt, er erhält nur Scroll-Up- und Scroll-Down-Ereignisse. (Mac Benutzer benötigt, um dies zu testen;)) – giorgio

+0

Ja, das ist, was ich denke ... Seite noch untergeht. Speichern Sie den Offset und vergleichen Sie mit dem vorherigen, sollte Ihnen die Richtung unabhängig von der Bewegung sagen. – Jorg

Antwort

5

Es ist eigentlich eine einfache Antwort, so lange die Mac-Benutzer verwenden Safari--

function myWheelEventHandler(event) { 
    var deltaY = -event.wheelDeltaY; 
    if (event.webkitDirectionInvertedFromDevice) deltaY = -deltaY; 
    // use value for something 
} 

In diesem Beispiel wird der Wert von deltaY positiv sein, wenn der Benutzer das Mausrad weg von ihnen rollt (oder Trackpad-Äquivalent) und ansonsten negativ, unabhängig von der systemweiten "natürlichen" Bildlaufeinstellung.

Mit anderen Worten, wenn die Eigenschaft webkitDirectionInvertedFromDevice vorhanden ist und den Wert true hat, können Sie sicher sein, dass das "natürliche" Scrollen aktiviert ist. Es wird sogar aktualisiert, wenn sich die Einstellung ändert, während das Skript ausgeführt wird. Die Eigenschaft ist nur für Rad-Events verfügbar (keine Scroll-Ereignisse).

Wenn die Eigenschaft nicht vorhanden ist oder vorhanden ist, aber den Wert "false" hat (was in Chrome aufgrund eines Fehlers immer der Fall ist), wissen Sie leider nicht, ob die Bildlaufrichtung umgekehrt ist oder nicht.

Ihre Idee, zu testen, wie sich die Seite bei Radereignissen bewegt, ist möglicherweise die robusteste Lösung. Sie könnten ein unsichtbares (leeres) div vor Ihrer Diashow erstellen, das auf overflow gesetzt ist: scroll, mit einem größeren leeren div darin. Wenn Sie das erste Mal ein Wheel-Event auf diesem Div empfangen, können Sie die Scroll-Richtung berechnen und den entsprechenden Folienwechsel auslösen.