JavaScript原生定时器实现缓动动画原理与代码

作者:交互手记

时间:2026-10-23

浏览:381

本文详解如何使用JavaScript原生定时器实现缓动动画效果。核心原理是通过定时器动态修改元素边距产生移动,关键在于利用公式计算每一步的移动距离,并根据正负值对步数进行取整处理,确保动画能准确停止在指定位置。文章提供了完整的函数封装及HTML演示代码,帮助开发者理解并应用这一基础动画技术。

文章目录

JavaScript原生定时器实现缓动动画原理与代码

本文介绍如何使用JavaScript原生定时器来实现动画的缓动效果,供读者参考学习。

其基本实现原理是利用定时器不断修改元素的边距,从而产生移动的视觉动画。

为了实现缓动效果,必须让移动速度发生变化。

缓动动画的核心在于移动速度的动态变化,这需要借助特定的公式或算法来实现。

计算公式如下: 移动单位 = (指定移动位置边距 - obj.offsetLeft) / 10; var step = (ydpx - obj.offsetLeft) / 10;

在实现过程中有一个关键细节需要注意:

移动的步数必须去除小数部分,否则由于除法运算可能导致无法精确到达指定位置,产生误差。 当step小于0时,表示向左移动,此时应舍去小数,例如1.2变为1; 当step大于0时,表示向右移动,此时应进行进位处理,例如1.2变为2。 这涉及基本的数学处理逻辑。

明确了上述逻辑后,后续的代码实现将变得简单许多:


//ydjl:移动到指定位置 (obj.offsetLeft)
function animate(obj,ydpx) {
 //清除定时器 防止每一次调用都产生一个定时器,叠加导致问题(速度变快)
 clearInterval(obj.timer); 
 obj.timer=setInterval(function () {
  var step = (ydpx - obj.offsetLeft) / 10; //移动距离
  //取整
  step = step>0 ? Math.ceil(step) : Math.floor(step);
  //判断是否移动到指定位置
  if(obj.offsetLeft == ydpx)
  {
  //清除定时器,停止移动
   clearInterval(obj.timer);
  }
  //修改left实现移动
  obj.style.left = obj.offsetLeft + step + 'px';

 },15)//移动间隔设置
}

以下是具体的演示效果:


<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <style>
  .boks{
   position: absolute;
   top: 300px;
   left:0;
   width: 100px;
   height: 100px;
   background-color: #ff0011;
  }
 </style>

</head>
<body>
<button class="yd500">移动500px</button>
<button class="yd800">移动800px</button>
<div class="boks">hezi</div>
</body>
<script>
 function animate(obj,ydpx) {
  //清除定时器
  clearInterval(obj.timer);
  obj.timer=setInterval(function () {
   var step = (ydpx - obj.offsetLeft) / 10;
   step = step>0 ? Math.ceil(step) : Math.floor(step);
    if(obj.offsetLeft == ydpx)
    {
     clearInterval(obj.timer);
    }
   obj.style.left = obj.offsetLeft + step + 'px';

  },15);
 }
 var yd500 = document.querySelector(".yd500");
 var yd800 = document.querySelector(".yd800");
 //盒子
 var boks = document.querySelector(".boks");

 yd500.addEventListener('click', function() {
  // 调用函数
  animate(boks, 500); //传递要移动的对象 和 移动位置
 })

 yd800.addEventListener('click', function() {
  // 调用函数
  animate(boks, 800); //传递要移动的对象 和 移动位置
 })
</script>
</html>

这是初学者的一份学习笔记记录。

JavaScript原生定时器实现缓动动画原理与代码

JavaScript原生定时器实现缓动动画原理与代码

以上就是本文的全部内容,希望能为各位的学习带来帮助,也欢迎大家继续支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章