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


以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
常用的JavaScript驗(yàn)證正則表達(dá)式匯總
這篇文章主要是對(duì)常用的JavaScript驗(yàn)證正則表達(dá)式進(jìn)行了詳細(xì)的匯總介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-11-11
Javascript 學(xué)習(xí)筆記 錯(cuò)誤處理
Javascript學(xué)習(xí)筆記:錯(cuò)誤處理.2009-07-07
js數(shù)組高階函數(shù)之includes()方法總結(jié)
JS的數(shù)組是一種特殊的對(duì)象,其特點(diǎn)是在值的列表中按照順序存放值,在 JS中,數(shù)組是由中括號(hào) [] 括起來的數(shù)值序列,本篇文章給大家介紹js數(shù)組高階函數(shù)——includes()方法,感興趣的朋友一起看看吧2023-12-12
使用json對(duì)象轉(zhuǎn)化為key,value的對(duì)象數(shù)組
這篇文章主要介紹了使用json對(duì)象轉(zhuǎn)化為key,value的對(duì)象數(shù)組方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
拿捏javascript對(duì)象增刪改查應(yīng)用及示例
“撩過”c++的對(duì)象,“拿捏”了python的對(duì)象,那么今天我們看看javascript中的對(duì)象到底是什么,看能不能一次性拿下,不行的話就多來幾次,想做“海王”就多物色幾門語言的對(duì)象,多new幾個(gè),最終你會(huì)發(fā)現(xiàn)都差不多2022-03-03
js+css3實(shí)現(xiàn)簡(jiǎn)單時(shí)鐘特效
這篇文章主要為大家詳細(xì)介紹了js+css3實(shí)現(xiàn)簡(jiǎn)單時(shí)鐘特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09
JavaScript數(shù)組去重的3種方法和代碼實(shí)例
這篇文章主要介紹了JavaScript數(shù)組去重的3種方法和代碼實(shí)例,本文直接給出實(shí)例代碼,需要的朋友可以參考下2015-07-07

