Я написал функцию, которая будет плавно прокручивать экран до точки dest
пикселя. Проблема заключается в том, что всякий раз, когда выбирается пункт назначения прокрутки (dest), превышающий общую высоту <body>
, прокрутка никогда не останавливается, даже при достижении конца <body>
(попробуйте прокрутить вверх после того, как прокрутка «остановится»).
function scroll(dest) {
var x, scrollDist;
if(dest > document.body.offsetHeight) {
dest = document.body.offsetHeight;
}
console.log(document.body.offsetHeight);
console.log(dest);
x = setInterval(function() {
// Calculate the scroll distance
scrollDist = dest - window.scrollY;
// Log the scroll distance at each iteration
console.log(scrollDist);
// If the scroll distance is greater than 10, scroll down 10px, otherwise
// scroll down by an amount equal to scrollDist then stop scrolling
if(Math.abs(scrollDist) >= 10) {
// If the scroll distance is positive scroll down, otherwise scroll up
if(scrollDist > 0) {
window.scrollBy(0,2);
} else {
window.scrollBy(0,-2);
}
} else {
window.scrollBy(0,scrollDist);
clearInterval(x);
}
},1);
}
scroll(10000);
Попробуйте это на этой веб-странице или любой другой веб-странице с высотой тела менее 10000 пикселей. Заглянув в консоль, вы можете заметить, что после достижения конца тела scrollDist продолжает регистрироваться как 410, что является самой странной частью. Но почему? Я не вижу ничего плохого в алгоритме.