Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Прерывание requestAnimationFrame при onwheel (https://javascript.ru/forum/misc/64492-preryvanie-requestanimationframe-pri-onwheel.html)

anarmus 15.08.2016 18:15

Прерывание requestAnimationFrame при onwheel
 
Всем привет! Делал кнопку "Вверх", которая, что логично, скролит страницу вверх до нулевого пикселя. Ссылка:
<a href="#" id="scrollUp">Наверх</a>


И скрипт:
function scrollUp() {
    window.scrollBy(0,-20);
    if (window.pageYOffset > 0) {requestAnimationFrame(scrollUp);}
}
document.getElementById('scrollUp').addEventListener('click', function(e) {
    e.preventDefault();
    scrollUp();
}, false);


Теперь вопрос, как прерывать скрол (анимацию скрола), если пользователь начал крутить колёсико мышки, т.е. скролить самостоятельно?

Пробовал вот так:
if ((window.onwheel != undefined) || (window.pageYOffset == 0)) {return false;}
else {requestAnimationFrame(scrollUp);}

Не работает.

anarmus 15.08.2016 19:10

Решил вот так:
function scrollUp() {
	window.scrollBy(0,-20);
	document.addEventListener("wheel", function() {a = 0;}, false);
	if (( a == 0) || (window.pageYOffset == 0)) {return;}
	else {requestAnimationFrame(scrollUp);}
}
document.getElementById('scrollUp').addEventListener('click', function(e) {
	e.preventDefault();
	a=1;
	scrollUp();
}, false);

warren buffet 15.08.2016 23:00

anarmus, ты квадратное колесо изобрел. Юзер не сможет отменить свое желание "наверх" из-за скорости прокрутки. Ну с какого места он захочет крутить сам, если у него со страшной скоростью все летит мимо ушей? Кстати, в процентах мотай, тогда любая прокрутка всегда будет укладываться в одинаковый промежуток времени и плавно останавливаться наверху.


Часовой пояс GMT +3, время: 23:00.