这期内容当中小编将会给大家带来有关如何使用原生JS制作一个缓动动画,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
原理很简单通过定时器修改边距达到移动动画效果
实现速度的变化
缓动必然移动速度会有变化,这里需要用到一个小公式或者说算法
移动单位 = (指定移动位置边距 - obj.offsetLeft) / 10;
var step = (ydpx - obj.offsetLeft) / 10;
有一个细节需要注意下:
移动的步数应该去掉小数,否者因为除法的原因无法移动到指定位置,会有一些差距
当step小于0对应的是向左移动舍去小数如:1.2 为1
大于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>
上述就是小编为大家分享的如何使用原生JS制作一个缓动动画了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。