JavaScript實(shí)現(xiàn)緩動(dòng)動(dòng)畫(huà)
JavaScript原生定時(shí)器實(shí)現(xiàn)動(dòng)畫(huà)的緩動(dòng)效果,供大家參考,具體內(nèi)容如下
原理很簡(jiǎn)單通過(guò)定時(shí)器修改邊距達(dá)到移動(dòng)動(dòng)畫(huà)效果
實(shí)現(xiàn)速度的變化
緩動(dòng)必然移動(dòng)速度會(huì)有變化,這里需要用到一個(gè)小公式或者說(shuō)算法?
移動(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(wú)法移動(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é)問(wèn)題**
之后代碼的實(shí)現(xiàn)就簡(jiǎn)單多了:
//ydjl:移動(dòng)到指定位置 (obj.offsetLeft) function animate(obj,ydpx) { //清除定時(shí)器 防止每一次調(diào)用都產(chǎn)生一個(gè)定時(shí)器,疊加導(dǎo)致問(wèn)題(速度變快) 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í)有所幫助,也希望大家多多支持腳本之家。
- javascript實(shí)現(xiàn)緩動(dòng)動(dòng)畫(huà)效果
- javascript實(shí)現(xiàn)左右緩動(dòng)動(dòng)畫(huà)函數(shù)
- JavaScript緩動(dòng)動(dòng)畫(huà)函數(shù)的封裝方法
- js實(shí)現(xiàn)緩動(dòng)動(dòng)畫(huà)
- tween.js緩動(dòng)補(bǔ)間動(dòng)畫(huà)算法示例
- js實(shí)現(xiàn)帶緩動(dòng)動(dòng)畫(huà)的導(dǎo)航欄效果
- JavaScript 詳解緩動(dòng)動(dòng)畫(huà)的封裝與使用
相關(guān)文章
使用JavaScript實(shí)現(xiàn)點(diǎn)擊循環(huán)切換圖片效果
本文通過(guò)實(shí)例代碼給大家介紹了通過(guò)js實(shí)現(xiàn)點(diǎn)擊循環(huán)切換圖片效果,需要的朋友參考下2017-09-09詳解JavaScript如何準(zhǔn)確獲取任意變量的數(shù)據(jù)類型
js是弱類型語(yǔ)言,或者說(shuō)是動(dòng)態(tài)語(yǔ)言,在定義變量時(shí)我們可以不提前聲明變量的類型,也可以在變量聲明后賦予不同類型的值。所以本文為大家詳解一下JavaScript如何準(zhǔn)確獲取任意變量的數(shù)據(jù)類型,需要的可以參考一下2022-06-06jquery下onpropertychange事件的綁定方法
用了onchange事件,但是在輸入的時(shí)候,用Javascript計(jì)算出并填值的那一列并不會(huì)響應(yīng)onchange 事件。2010-08-08Three.js實(shí)現(xiàn)3D機(jī)房效果
這篇文章主要為大家詳細(xì)介紹了Three.js實(shí)現(xiàn)3D機(jī)房效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12Array, Array Constructor, for in loop, typeof, instanceOf
雖然在 JavaScript 中數(shù)組是是對(duì)象,但是沒(méi)有好的理由去使用 `for in` 循環(huán) 遍歷數(shù)組。相反,有一些好的理由不去使用 for in 遍歷數(shù)組。2011-09-09關(guān)于arguments,callee,caller等的測(cè)試
關(guān)于arguments,callee,caller等的測(cè)試...2006-12-12js內(nèi)置對(duì)象 學(xué)習(xí)筆記
今天系統(tǒng)的學(xué)了一下javascript的內(nèi)置對(duì)象。2011-08-08javascript實(shí)現(xiàn)對(duì)表格元素進(jìn)行排序操作
這篇文章主要介紹了javascript實(shí)現(xiàn)對(duì)表格元素進(jìn)行排序操作,分別可以實(shí)現(xiàn)點(diǎn)擊之后排序和還原,和排升序和降序的功能,文章末尾附完整代碼,感興趣的小伙伴們可以參考一下2015-11-11