JavaScript实现匀速运动及消除缝隙的方法

作者:白露时间:2026-10-27 18:47:27浏览:194

本文介绍如何使用JavaScript的setInterval定时器实现元素的匀速运动。重点解决运动停止时因取整操作导致的像素缝隙问题,通过判断剩余距离与速度的关系,在停止时强制设置目标位置,确保元素准确到达指定坐标。

JS匀速运动实现与缝隙处理

实现效果如下所示。

JS匀速运动实现与缝隙处理

 

实现思路如下。

核心逻辑是利用setInterval()定时器来驱动运动过程。关键在于停止机制的处理:在运动即将结束时,需要增加一个判断逻辑以填充可能存在的缝隙,确保元素能精确到达目标位置。

具体代码实现如下。

代码示例如下:

<head runat="server">
<title></title>
<style type="text/css">
#div1
        {
width: 100px;
height: 100px;
background: #0000FF;
position: absolute;
left: 800px;
top: 100px;
        }
#div200
        {
width: 1px;
height: 400px;
background: #FF0000;
position: absolute;
left: 200px;
        }
#div500
        {
width: 1px;
height: 400px;
background: #FF0000;
position: absolute;
left: 500px;
        }
</style>
<script type="text/javascript">
function move(end) {
var oDiv = document.getElementById('div1');
var timer = null;
timer = setInterval(function () {
var speed = (end - oDiv.offsetLeft) / 5; //根据终点和offsetLeft取出运动的速度
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); //进位取整,小数位变为整位,
// if (oDiv.offsetLeft <= end) {
// clearInterval(timer);
                //                }
// else {
// oDiv.style.left = oDiv.offsetLeft + speed + 'px';
                //                }
if (Math.abs(end - oDiv.offsetLeft) <= speed) { //由于在停止的时候最后会出现小的缝隙,或者说没有完全的到达指定地点,所以要小于它的速度
clearInterval(timer); //当距离小于速度时,让计时器停止
oDiv.style.left = end + 'px'; //在停止后填充缝隙。
                }
else {
oDiv.style.left = oDiv.offsetLeft + speed + 'px'; //移动DIV
                }
}, 30)
        }
</script>
</head>
<body>
<input type="button" id="btn1" value="到500的位置" onclick="move(500);" />
<input type="button" id="btn2" value="到200的位置" onclick="move(200);" />
<div id="div1">
</div>
<div id="div200">200
</div>
<div id="div500">500
</div>
</body>
作者最新文章