2014-02-09 13 views
7

Ich möchte versuchen, und replizieren io7 Safari-Funktion, wo die URL und Navigationsleisten minimieren, wenn Sie langsam scrollen, in Javascript/jquery. Das erste Ding ist, Rollengeschwindigkeit zu ermitteln, ich habe this Frage bereits gesehen, aber ich tue dies in einem Inhaltsskript, also habe ich nicht notwendigerweise das obere und untere Element, das sie benutzen. Gibt es eine andere Möglichkeit, die Scroll-Geschwindigkeit zu erkennen?Wie erkennt man die Scrollgeschwindigkeit mit Jquery?

Antwort

8

Sie können das Scroll-Ereignis über jQuery anhängen und eine Kombination aus Zeitstempeln und scrollOffset verwenden, um die Scrollgeschwindigkeit zu bestimmen, indem Sie den Versatz/Zeitpunkt mit dem letzten Scroll-Ereignis vergleichen. Etwas wie folgt aus:

var lastOffset = $(mySelector).scrollTop(); 
var lastDate = new Date().getTime(); 

$(mySelector).scroll(function(e) { 
    var delayInMs = e.timeStamp - lastDate; 
    var offset = e.target.scrollTop - lastOffset; 
    var speedInpxPerMs = offset/delayInMs; 
    console.log(speedInpxPerMs); 

    lastDate = e.timeStamp; 
    lastOffset = e.target.scrollTop; 
}); 

Anyways, da Sie die Kontrolle über Navigationsleiste nicht in einem regulären Browser habe ich den Punkt nicht hier sehen:/

Mai werden Sie für so etwas suchen: Parallax scroll with sticky header

GL Chris

+0

Ich versuche, die Wirkung des nav zu imitieren Bar. Ich verwende ein Inhaltsskript in einer Chrome-Erweiterung, um ein Overlay zu erstellen, und wenn der Benutzer schnell nach unten scrollt, möchte ich, dass das Overlay schrumpft und aus dem Weg geht. – EasilyBaffled

+0

Nun das obige Skript wird Ihnen helfen, den "schnellen" Teil zu bestimmen. Je nach Scroll-Offset können Sie die Größe Ihres Overlays reduzieren Definieren Sie einen Punkt, wo Sie es verstecken können. Was fehlt dir? – cschuff

+1

Nun habe ich das Fenster in den mySelector-Spot platziert und ich bekomme NaN für speedInpxPerMs. Ich habe eingeschränkten Zugriff auf die Seite, weil dies ein Inhaltsskript ist, so dass möglicherweise ein Teil des Problems. – EasilyBaffled

1

ich versuchte cschuff s Antwort zu verwenden, aber etwas falsch war. Mit diesem Problem und die Freude, eine Klasse zu schreiben, habe ich einfach den Code in einer kleinen Klasse, erhalten sie hier: https://github.com/SocialbitGmbH/JavascriptScrollSpeedMonitor

Die Verwendung ist einfach:

var scrollSpeedMonitor = new ScrollSpeedMonitor(function (speedInPxPerMs, timeStamp, newDirection) 
{ 
    console.log('Scroll speed: ' + speedInPxPerMs); 
}); 
+0

Darüber hinaus gibt es einen StarScroller, um zu erkennen, wenn der Benutzer in Lichtgeschwindigkeit scrollt, um einige schöne "Lichtgeschwindigkeitseffekte" hinzuzufügen :-) https://github.com/SocialbitGmbH/JavascriptStarScroller –

+0

fehlt Ihnen ein schließendes ')' Klammer. –

+0

Danke, fügte es hinzu! :-) –

Verwandte Themen