2013-07-19 5 views
3

Я хотел бы автоматически прокручивать вверх, но выручайте, если пользователь начнет прокрутку.javascript прокрутите страницу вверх, если пользователь не начнет прокрутку

В настоящее время у меня останавливается анимация преждевременно, потому что сама прокрутка анимации прокручивается - поэтому она запускает действие «остановить прокрутку, если происходит прокрутка».

function stop_scrolling_to_top(){ 
    // stop animation attached to selector 
    $('html, body').stop(); 
} 

// scroll to the top automatically 
$('html, body').animate({ scrollTop: 0}, 1400, "easeOutQuint", function(){ 
    // callback when animation complete 
    do_not_do_when_scrolling(stop_scrolling_to_top); 
}); 

// stop animation if scrolling starts 
do_when_scrolling(stop_scrolling_to_top); 

Есть ли способ определить, вызвана ли прокрутка человеком или js? есть ли лучший способ?

+0

'$ (окно) .scroll (функция() {console.log ('свитка');});' делает этот огонь, если вам прокручивать программно? – Johan

+0

@Johan yessir – rikAtee

ответ

-1

Почему бы просто не послушать событие мыши? Если он был уволен, пользователь попытался выполнить прокрутку самостоятельно. Также вы можете прослушивать событие щелчка, если пользователь нажимает где-то, чтобы остановить прокрутку ...

+2

Есть больше способов прокрутки, чем колесико мыши. – Johan

+1

Прокрутка может быть активирована клавишей вверх, клавишей «вниз», «колесиком», щелчком мыши на панели scoroll или каким-то необычным способом - вот почему прослушивание события window.scroll, а не событий, которые вызывают указанное событие. – rikAtee

+0

Да, вы правы. Мне любопытно, как это решить. – Christian

1

Надеюсь, это поможет.

Он прослушивает событие колеса прокрутки клавиш +, которые могут быть использованы для прокрутки на странице (страница вверх/вниз, пробел, arrowkeys и т.д.):

$(document).keyup(function(e){ 

    if($.inArray(e.which, [33,34,32,38,40]) !== -1) 
     console.log('key'); 
     //potential scroll by key 

}); 

$(document).bind((/Firefox/i.test(navigator.userAgent)) 
           ? 'DOMMouseScroll' 
           : 'mousewheel', function(e){ 

    var evt = window.event || e; 
    evt = evt.originalEvent ? evt.originalEvent : evt;    
    var delta = evt.detail ? evt.detail*(-40) : evt.wheelDelta; 

    if(delta > 0) 
     console.log('mousewheel up'); 
     //scroll up 
    else 
     console.log('mousewheel down'); 
     //scroll down 
}); 

И если вы заметили, что «ваши» прокрутки активные, остановить его, как вы делали выше:

if($('html, body').is(':animated')) 
    $('html, body').stop(); 

http://jsfiddle.net/MQQ3F/1/

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