JavaScript運動函數(shù)實例詳解
運動函數(shù)是我們自己封裝的一個函數(shù)。
作用是將css樣式的改變不是一次性完成 是 逐步完成 執(zhí)行效果 看上去 像是 動畫/運動 完成的css樣式改變。
實際項目中框架等都有自己的運動函數(shù)我們目前封裝一個簡單的兼容多屬性的運動函數(shù)。
運動函數(shù)部分:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } div { width: 100px; height: 100px; background: rgb(231, 12, 48); margin: 0 auto; opacity: 0.3; /* transition: 3s; */ } p { width: 100px; height: 100px; background: black; position: fixed; top: 200px; left: 50px; } </style> </head> <body> <button>點擊</button> <div></div> <script> var oDiv = document.querySelector('div'); var oBtn = document.querySelector('button'); var oP = document.querySelector('p') oBtn.addEventListener('click',function(){ move(oDiv,{width:1800,height:900,opacity:1} , function(){ oDiv.style.background = 'black' } ); }) // 運動函數(shù)命名 // move 運動函數(shù) // @param object element 要執(zhí)行運動函數(shù)的標簽對象 // @param object object 要執(zhí)行運動的css屬性 和 最終數(shù)值 // @param function callback 運動結(jié)束執(zhí)行的回調(diào)函數(shù) // 默認值是空函數(shù) function move(element, object, callback = function () { }) { // 定義變量存儲定時器個數(shù) let num = 0; // 循環(huán)遍歷參數(shù)二(object) // 使用 for...in 循環(huán) 使用 let 定義變量 for (let type in object){ // type 是 參數(shù)2對象的屬性 也就是 要運動的css樣式的屬性 // object[type] 是 參數(shù)2對象的屬性值 也就是 要運動的css樣式的 最終數(shù)值 // 定時器數(shù)量加一 num++; // 開始數(shù)值,也就是獲取的原始數(shù)值,兼容透明度寫法 let startVal = (type === 'opacity') ? window.getComputedStyle(element)[type] * 100 : parseInt(window.getComputedStyle(element)[type]); // 結(jié)束數(shù)值,也就是輸入的屬性對應(yīng)的屬性值,兼容透明度寫法 let endVal = (type === 'opacity') ? object[type] * 100 : object[type]; // 定時器開始,time記錄定時器編號 let time = setInterval( function () { // 設(shè)定步長值= 結(jié)束數(shù)值 - 開始數(shù)值 / 10 let step = (endVal - startVal) / 10; // 如果步長值大于0 就向上取整,反之則向下取整 step = step > 0 ? Math.ceil(step) : Math.floor(step); // 將初始值 += 步長值 再把新值賦值給初始值 startVal += step; // 將新的步長值 賦值給 標簽對象的css樣式 兼容 透明度 element.style[type] = (type === 'opacity') ? startVal / 100 : startVal + 'px'; // 如果初始值等于最終值 if (startVal === endVal) { // 清除定時器 clearInterval(time); // 變量 累減1 也就是 少了一個執(zhí)行的定時器 // num--; // 當執(zhí)行的定時器為0 時,所有定時器都清除了 if (num === 0) { callback(); } } }, 20) } } </script> </body> </html>
運行結(jié)果:
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
JS格式化數(shù)字金額用逗號隔開保留兩位小數(shù)
JS格式化數(shù)字金額只留兩位小數(shù)。寫了個格式化函數(shù)??梢钥刂菩?shù)位數(shù),自動四舍五入,感興趣的朋友可以了解下2013-10-10一個JavaScript函數(shù)把URL參數(shù)解析成Json對象
一個JavaScript函數(shù)parseQueryString,它的用途是把URL參數(shù)解析為一個對象,很實用,大家可以看看2014-09-09微信小程序結(jié)合Storage實現(xiàn)搜索歷史效果
這篇文章主要為大家詳細介紹了微信小程序結(jié)合Storage實現(xiàn)搜索歷史效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05javascript實現(xiàn)二分查找法實現(xiàn)代碼
javascript實現(xiàn)二分查找法實現(xiàn)代碼...2007-11-11