2012-03-16 2 views
0

У меня возникли проблемы с James Padolsey's custom events: scrollstart и scrolltopJQuery scrollstart, scrollstop и очень быстрый вопрос скроллинг

Когда я использую колесо мыши для прокрутки одну «ступеньку» или я нажимаю полосу прокрутки где-то далеко внизу или выше его текущего положения, вызывая внезапную прокрутку на большую сумму, я получаю те же самые значения scrollTop() для scrollstart и scrolltop. - Я не могу определить, где начался свиток или в каком направлении прокрутки. jsFiddle доступно here (обратите внимание: если вы имеете чрезвычайно высокое разрешение, вам нужно будет добавить больше текста в HTML, чтобы в окне результатов появилась полоса прокрутки).

HTML:

<html> 
    <body> 
     <div id="scrollable"> 
      <!-- insert lots of text here --> 
     </div> 
    </body> 
</html> 

CSS:

#scrollable {width: 120px;} 

JavaScript:

var before = 0; 

$(window).bind('scrollstart', function() { 
    before = $(window).scrollTop(); 
}); 

$(window).bind('scrollstop', function() { 
    alert('before: ' + before + "\nafter: " + $(window).scrollTop()) 
}); 

jsFiddle available here

Любые идеи о том, как получить истинное scrollTop() для мероприятия scrollstart? Модификация плагина - это вариант, который я предполагаю, поэтому все идеи приветствуются.

ответ

1

Вместо записи значение before при запуске прокрутки, я бы предложил сделать это в другом случае, например MouseMove()

jsFiddle of this idea working

+0

Приятная идея, но с ошибкой, если вы используете мышь, чтобы перетащить полосу прокрутки – bububaba

+0

Исправлено: http://jsfiddle.net/mLxE4/5/ – aurbano

+0

Все еще возвращает только последние несколько пикселей движения (0-5 в зависимости от скорости) в FF 10.0.2 при перетаскивании полосы прокрутки с мышью – bububaba

0

Может быть, я неправильно понял ваш вопрос (я не использовал плагин), но я думаю, вам не нужно использовать каждую часть этого плагина. Если вы хотите знать, предыдущее и текущее значение ScrollTop и его направления, посмотрите на это:

http://jsfiddle.net/C3ye7/

var currentScrollTop, temporalScroll = 0; 
$(window).scroll(function(){ 
    currentScrollTop = $(this).scrollTop(); 
    console.log('Previous value: ' + temporalScroll) 
    if (currentScrollTop > temporalScroll) { 
     console.log('scroll down') 
     console.log('Current value: ' + currentScrollTop) 
    } 
    else { 
     console.log('scroll up'); 
     console.log('Current value: ' + currentScrollTop) 
    } 
    temporalScroll = currentScrollTop; 

}); 

Для того, чтобы добавить функциональные возможности синхронизации, вы можете использовать только ту часть этот плагин (или просто запустите setTimeout для записи больших изменений при прокрутке).

+0

Я изменил оповещения с помощью сообщений console.log (я чувствую, что они менее раздражают), поэтому не забудьте запустить консоль, чтобы увидеть изменения. –

+0

К сожалению, мне нужна функциональность плагина для запуска событий 'scrollstart' и' scrollstop'. – bububaba

+0

Ну, вы все равно можете использовать это. Обратите внимание, что в реальном плагине используется таймер: «... единственный способ даже имитировать такое событие - иметь задержку между последним действием прокрутки и самим событием - таймер может начинаться с каждого события« прокрутки »и то, если этот таймер не очищается во времени (скажем, 500 миллисекунд), тогда можно предположить, что пользователь «остановил прокрутку», или, сделал перерыв в длинном прокрутке, либо обстоятельство, на мой взгляд, требует события «scrollstop». ». –

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