我想使用以下脚本在我的网站上为平滑的身体滚动制作动画:
function autoScroll(el) {
var scrollY = 0;
var distance = 2;
var speed = 10;
var scrolling = function(){
var currentY = window.pageYOffset;
var targetY = document.getElementById(el).offsetTop;
var bodyHeight = document.body.offsetHeight;
var yPos = currentY + window.innerHeight;
var animator = setInterval('autoScroll(\''+el+'\')', speed)
interval = animator;
if (yPos > bodyHeight){
clearInterval(animator);
}else{
if (currentY < targetY - distance){
scrollY = currentY + distance;
window.scrollTo(0, scrollY);
}else if (currentY > targetY + distance){
scrollY = currentY - distance;
window.scrollTo(0, scrollY);
}else{
clearInterval(animator);
}
}
}
return scrolling();
}
脚本运行,但行为不端。当我第一次单击菜单时,它很好地滚动到正确的位置,然后滚动停止。但是当我第二次单击菜单时,脚本永远不会停止滚动,它会尝试同时以类似随机的方式在两个方向上滚动。奇怪的是,当我使用 setTimeout() 和 clearTimeout() 函数而不是 setInterval() 和cleatIntervaw 时,该函数工作得很好。它必须是 setInterval() 的原因是因为动画比我使用 setTimeout() 时快得多。有人可以向我解释为什么会发生这种异常以及如何解决它吗?
感谢
Jared
更新
这是我用来滚动的 html 标记:
<a href="#" class="scroll" onclick="return false;" onmousedown="autoScroll('location');"><div class="tableLink">Location</div></a>
...
<div id="location" class="page">location</div>