JavaScript實現(xiàn)緩動動畫
JavaScript原生定時器實現(xiàn)動畫的緩動效果,供大家參考,具體內(nèi)容如下
原理很簡單通過定時器修改邊距達(dá)到移動動畫效果
實現(xiàn)速度的變化
緩動必然移動速度會有變化,這里需要用到一個小公式或者說算法?
移動單位 = (指定移動位置邊距 - obj.offsetLeft) / 10;
var step = (ydpx - obj.offsetLeft) / 10;
有一個細(xì)節(jié)需要注意下:
移動的步數(shù)應(yīng)該去掉小數(shù),否者因為除法的原因無法移動到指定位置,會有一些差距
當(dāng)step小于0對應(yīng)的是向左移動舍去小數(shù)如:1.2 為1
大于0向右移動,進(jìn)位,如:1.2為2
這應(yīng)該是個數(shù)學(xué)問題**
之后代碼的實現(xiàn)就簡單多了:
//ydjl:移動到指定位置 (obj.offsetLeft)
function animate(obj,ydpx) {
//清除定時器 防止每一次調(diào)用都產(chǎn)生一個定時器,疊加導(dǎo)致問題(速度變快)
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實現(xiàn)移動
obj.style.left = obj.offsetLeft + step + 'px';
},15)//移動間隔設(shè)置
}
下面是演示:
<!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() {
// 調(diào)用函數(shù)
animate(boks, 500); //傳遞要移動的對象 和 移動位置
})
yd800.addEventListener('click', function() {
// 調(diào)用函數(shù)
animate(boks, 800); //傳遞要移動的對象 和 移動位置
})
</script>
</html>
萌新小白的學(xué)習(xí)記錄


以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
js數(shù)組高階函數(shù)之includes()方法總結(jié)
JS的數(shù)組是一種特殊的對象,其特點是在值的列表中按照順序存放值,在 JS中,數(shù)組是由中括號 [] 括起來的數(shù)值序列,本篇文章給大家介紹js數(shù)組高階函數(shù)——includes()方法,感興趣的朋友一起看看吧2023-12-12
使用json對象轉(zhuǎn)化為key,value的對象數(shù)組
這篇文章主要介紹了使用json對象轉(zhuǎn)化為key,value的對象數(shù)組方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06

