这篇文章主要介绍js缓动动画封装的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
主要用到offsetLeft、Math.ceil、Math.floor、Math.abs。
注意offsetLeft获取到的的值为四舍五入的style.left的数值,offsetLeft = Math.round(style.left的数值部分) 比如style.left = 369.4px, 获取到的offsetLeft = 369。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>缓动动画</title>
<style>
#slow_action {
width: 100px;
height: 100px;
background: pink;
position: absolute;
}
</style>
</head>
<body>
<button id="btn1">运动到400</button>
<button id="btn2">运动到0</button>
<p id="slow_action"></p>
</body>
<script>
var btn1 = document.getElementById("btn1")
var btn2 = document.getElementById("btn2")
var p = document.getElementById("slow_action")
/**
* 动画原理 = 盒子位置 + 步长(步长越来越小)
* 盒子位置 = 盒子本身的位置 + (目标位置 - 盒子本身位置)/10
*/
btn1.onclick = function () {
fn(p,400)
}
btn2.onclick = function () {
fn(p,0)
}
function fn(ele, target) {
clearInterval(ele.timer);
ele.timer = setInterval(function () {
// var target = 400;
//最后10像素都是1px向目标位置移动 最后到达指定位置
var step = (target - ele.offsetLeft)/10;
//差值大于10的时候向上取整 小于0的时候向下取整
step = step > 0 ? Math.ceil(step) : Math.floor(step)
ele.style.left = ele.offsetLeft + step + "px";
//检测定时器是否停止
console.log(1)
//跳出条件 目标位置-当前位置的绝对值,小于步长
if(Math.abs(target - ele.offsetLeft) < Math.abs(step)) {
ele.style.left = target + "px";
clearInterval(ele.timer)
}
}, 30);
}
</script>
</html>
以上是“js缓动动画封装的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。