Изменить вашу функцию к этому:
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 анимации, например некоторые другие ответы были бы
Некоторые дополнительная информация:
Почему вы обязательными для всех этих событий? "scroll mousewheel и т. д."
Существует много разных типов событий прокрутки. Вы можете прокручивать вниз с помощью мыши, клавиатуры, сенсорного экрана и т. Д. При этом мы обязательно поймаем все из них.
Что такое var page = $("html, body");
? Могу я просто использовать $("html, body")
всюду?
Если вы используете один и тот же селектор более одного раза, целесообразно кэшировать их в variable. Будет легче писать/использовать и иметь лучшую производительность, чем при каждом повторном вычислении селектора.
Где я могу найти дополнительную информацию об .animate()
и .stop()
?
Вы можете прочитать документацию jQuery для .animate() и .stop(). Я также рекомендую прочитать около animation queue's, так как .stop()
работает по этому принципу.
спасибо, он отлично работает. Просто вопрос, я хочу игнорировать клики на элементах, поэтому он не влияет на гиперссылки, я пробовал «раздел: не (а)» в селекторе, но он не работает. Не могли бы вы отредактировать селектор, чтобы игнорировать ссылки? – lisovaccaro
Это должно помочь: http://stackoverflow.com/questions/2457246/jquery-click-function-exclude-children –
Я обнаружил, что мне пришлось удалить «прокрутку» и «keyup» из того, что было связано, потому что '.stop()' запускался при первоначальном нажатии на '$ ('section')' (используя этот пример) – Crimbo