Ответ 1
Измените свою функцию следующим образом:
var page = $("html, body");
$( "section" ).click(function(e) {
page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove", function(){
page.stop();
});
page.animate({ scrollTop: $(this).position().top }, 'slow', function(){
page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove");
});
return false;
});
Это будет:
- Остановить анимацию, если пользователь прокручивается вручную (только во время анимации)
- Не мешает вашей обычной анимации jQuery, поэтому некоторые другие ответы будут
Дополнительная информация:
Почему вы привязываетесь ко всем этим событиям? "прокрутить колесо мыши и т.д."
Существует много разных типов событий прокрутки. Вы можете прокручивать вниз с помощью мыши, клавиатуры, сенсорного экрана и т.д. При этом мы обязательно поймаем их всех.
Каково использование
var page = $("html, body");
? Не могу ли я просто использовать$("html, body")
везде?
Если вы используете один и тот же селектор более одного раза, рекомендуется использовать их в variable. Легче писать/использовать и иметь лучшую производительность, чем при каждом повторном вычислении селектора.
Где я могу найти дополнительную информацию о
.animate()
и.stop()
?
Вы можете прочитать документацию jQuery для . animate() и . остановить(). Я также рекомендую прочитать очередь анимации, поскольку .stop()
работает по этому принципу.