时间:2022-06-21 10:02:25 | 栏目:JavaScript代码 | 点击:次
悬浮跟随框是我们在网页中经常见到的效果,我们还是使用上一实例中的运动框架去实现。
1、定义一个运动函数,当触发时调用,并且传递一个目标位置作为参数
2、运动函数内部,调用定时函数,在定时函数内部,先求出元素位置与目标位置的距离差,然后除以一个数值作为速度(由于距离差一直在缩小,所以速度值也一直在变小,从而达到缓动效果)
3、由于网页上位置设置最小单位是1px,所以在步骤二中的运算可能会出现小数的情况,我们需要对小数进行处理,否则元素到达的位置总是和目标位置有1px的差距。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>New Web Project</title> <style> #div1{ width:100px; height:150px; background: red; border:1px solid #008000; right:0px; position: absolute; } #div2{ width:1920px; height:1px; background:red; position: absolute; } </style> <script> window.οnlοad=function(){ var oDiv=document.getElementById('div1'); var oDiv1=document.getElementById('div2'); var timer=null; oDiv.style.top=(document.documentElement.clientHeight-oDiv.offsetHeight)/2+document.documentElement.scrollTop+'px'; window.οnscrοll=function(){ var scrolltop=document.documentElement.scrollTop || document.body.scrollTop; var iTarget=(document.documentElement.clientHeight-oDiv.offsetHeight)/2+scrolltop; iTarget=Math.floor(iTarget); oDiv1.style.top=iTarget+'px'; startMove(iTarget); }; function startMove(itarget){ clearInterval(timer); timer=setInterval(function(){ var iDis=itarget-oDiv.offsetTop; var speed=iDis/5; if(iDis>=0){ speed=Math.ceil(speed);//当speed为小于1的数时,将它变为1,从而使元素位置移动一个像素,因为小于1的像素会被近似为0 } else{ speed=Math.floor(speed); } if(oDiv.offsetTop==itarget) { clearInterval(timer); } else { oDiv.style.top=oDiv.offsetTop+speed+'px'; } document.title=oDiv.offsetTop; },30); } }; </script> </head> <body style="height:2000px;"> <div id="div1"> </div> </body> </html>
运行结果图: