scrollTop的值为什么会自己动

在下小白想请问下下面的代码,为什么我拉滚动条停下了,但是scrollTop的值还在自己动?<!DOCTYPEhtml><html><body><style>body{he... 在下小白 想请问下下面的代码,为什么我拉滚动条停下了 ,但是scrollTop的值还在自己动?
<!DOCTYPE html>
<html>
<body>
<style>
body{height:2000px;}#box{width:100px; height:100px; background:red; position:absolute; bottom:0; right:0;}</style>
<script>
window.onscroll=function()
{
var bo=document.getElementById('box');
var pp=document.getElementById('p');
var qq=document.getElementById('q');
var scrollTop=document.body.scrollTop||document.documentElement.scrollTop;

var tar=scrollTop+document.documentElement.clientHeight-bo.offsetHeight;

function move(target){
var timer=setInterval(function(){
var speed=0;
if(target>bo.offsetTop)
{
speed=5;
}
else
{
speed=-5;
}

if(target==bo.offsetTop)
{
clearInterval(timer);
}
else
{
bo.style.top=bo.offsetTop+speed+'px';
}
pp.innerHTML='top'+bo.offsetTop;
qq.innerHTML='scr'+scrollTop+' '+'tar'+target;

},1000)
}

move(tar);
}

</script>
<div id='box'><p id='p'></p ><p id='q'></p ></div>
</body>
</html>
展开
 我来答
网海1书生
科技发烧友

2017-08-28 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26228

向TA提问 私信TA
展开全部
如果你的目的是让红色方块自动跑到右下角,那么你的做法是错误的,不能用onscroll事件来驱动,因为每次滚动屏幕时,效果都会叠加到里面的计时器中(因为滚动时计时器并没有结束),造成误差越来越大。此外你每次都是加减5px,这样是无法保证方块的位置与目标位置相等的,比如说方块当前位置是853px,而目标位置是855px,这样853再加5就是858,不等于855,然后它会减5又变为853,这样方块就会在853和858之间来回跳动,不会停止下来。
下面是我改动后的代码,你自己看看:
<!DOCTYPE html>
<html>
<body>
<style>
body{height:2000px;}
#box{width:100px; height:100px; background:red; position:absolute; bottom:0; right:0;}
</style>
<script>
window.onload=function(){
function move(){
var bo=document.getElementById('box');
var pp=document.getElementById('p');
var qq=document.getElementById('q');
var scrollTop=document.body.scrollTop||document.documentElement.scrollTop;
var tar=scrollTop+document.documentElement.clientHeight-bo.offsetHeight;
if(Math.abs(tar-bo.offsetTop)<=5){
bo.style.top=tar+"px";
}else if(tar>bo.offsetTop){
bo.style.top=(bo.offsetTop+5)+'px';
}else{
bo.style.top=(bo.offsetTop-5)+'px';
}
pp.innerHTML='top'+bo.offsetTop;
qq.innerHTML='scr'+scrollTop+' '+'tar'+tar;
}
setInterval(move,50);
}
</script>
<div id='box'><p id='p'></p ><p id='q'></p ></div>
</body>
</html>
ZESTRON
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸... 点击进入详情页
本回答由ZESTRON提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式