2014-02-09 6 views
7

Я хотел бы попробовать и повторить функцию сафари io7, где строки url и навигации минимизируются при медленном прокрутке в javascript/jquery. Прежде всего, чтобы обнаружить скорость прокрутки, я уже видел вопрос this, но я делаю это в сценарии содержимого, поэтому я не обязательно использую верхний и нижний элементы. Есть ли другой способ определения скорости прокрутки?Как определить скорость прокрутки с помощью JQuery?

ответ

8

Вы можете прикрепить к событию прокрутки через jQuery и использовать комбинацию временных меток и scrollOffset для определения скорости прокрутки путем сравнения времени смещения/времени с последним событием прокрутки. Что-то вроде этого:

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; 
}); 

В любом случае, так как вы не имеете контроля над навигационной панелью в регулярных браузерах я не вижу смысл здесь:/

Может быть вы ищете что-то вроде этого: Parallax scroll with sticky header

GL Chris

+0

Я пытаюсь имитировать эффект нав бар. Я использую скрипт контента в расширении chrome для создания наложения, и когда пользователь быстро прокручивается, я хочу, чтобы наложение уменьшалось и убиралось с пути. – EasilyBaffled

+0

Ну, приведенный выше сценарий поможет вам определить «быструю» часть. В зависимости от смещения прокрутки вы можете уменьшить размер наложения или. определить точку, где ее можно скрыть. Что вам не хватает? – cschuff

+1

Ну, я разместил окно в месте mySelector, и я получаю NaN для speedInpxPerM. У меня ограниченный доступ к странице, потому что это сценарий контента, чтобы, возможно, часть проблемы. – EasilyBaffled

1

Я пытался использовать cschuff сек ответ, но что-то не так. С этой проблемой и радость, чтобы написать класс, я просто поставить код в небольшой класс, получить его здесь: https://github.com/SocialbitGmbH/JavascriptScrollSpeedMonitor

Способ применения прост:

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

Кроме того, есть StarScroller для обнаружения, когда пользователь прокручивается в свете света, чтобы добавить некоторые приятные «эффекты скорости света» :-) https://github.com/SocialbitGmbH/JavascriptStarScroller –

+0

вам не хватает закрывающего ')' скобка. –

+0

Спасибо, добавлено! :-) –

Смежные вопросы