jQuery scrollstart, scrollstop и очень быстрая проблема прокрутки - PullRequest
0 голосов
/ 16 марта 2012

У меня проблема с пользовательскими событиями Джеймса Падолси : scrollstart и scrolltop

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

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

Ответы [ 2 ]

1 голос
/ 19 марта 2012

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

jsНазад этой идеи работает

0 голосов
/ 24 марта 2012

Возможно, я неправильно понял ваш вопрос (я не использовал этот плагин), но я думаю, что вам не нужно использовать каждую часть этого плагина. Если вы хотите знать только предыдущее и текущее значение 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, чтобы записать большее изменение при прокрутке).

...