JavaScript運(yùn)動(dòng)框架 多值運(yùn)動(dòng)(四)
多值運(yùn)動(dòng),也就是對(duì)于某個(gè)對(duì)象來說,不僅僅只是其中一個(gè)屬性值在變化,而是好多個(gè),比如寬,高,字體,透明度等等同時(shí)變化
當(dāng)然了,多值運(yùn)動(dòng)會(huì)產(chǎn)生一個(gè)問題,就是定時(shí)器何時(shí)關(guān)閉的問題!當(dāng)然是所有的屬性值都運(yùn)動(dòng)到目標(biāo)值了才能清理定時(shí)器,也就是等最慢的。就好比十個(gè)人一起聚餐,不能等到來一個(gè)人就開吃!
前幾篇講的都是一個(gè)元素對(duì)象中某一個(gè)屬性的運(yùn)動(dòng),這次講同一個(gè)元素對(duì)象中多個(gè)屬性值的緩沖運(yùn)動(dòng),那么每個(gè)屬性都有個(gè)終點(diǎn)(目標(biāo)點(diǎn)),我們把這些屬性及其目標(biāo)值寫成一個(gè)對(duì)象的形式,或者是json狀!容易產(chǎn)生的問題就是上面說的,這里用了共同的速度函數(shù),但有的屬性值從100 –> 101, 有的屬性值從100 –> 600,你得等耗時(shí)最長(zhǎng)的屬性值到達(dá)目標(biāo)值才能關(guān)閉該obj所擁有的定時(shí)器,設(shè)計(jì)的思路就是每次執(zhí)行輪詢函數(shù)設(shè)置一個(gè)bStob = true;在遍歷掃描json中屬性的時(shí)候,只要有沒到到目標(biāo)值的屬性,就設(shè)為false,這樣定時(shí)器就不會(huì)關(guān)閉,即使有的屬性值已經(jīng)到達(dá)終點(diǎn),此時(shí)輪詢依舊會(huì)執(zhí)行掃描,只不過此時(shí)該屬性運(yùn)動(dòng)速度為0了,也不會(huì)運(yùn)動(dòng)了。也就是之前:
if(attr == cur) { cleartInterval(obj.timer); }
要增強(qiáng)為:
if (bStop) { clearInterval(obj.timer); }
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>運(yùn)動(dòng)框架(四):多值運(yùn)動(dòng)</title> <style type="text/css"> div { width: 100px; height: 100px; background: orange; margin: 10px; float: left; } </style> </head> <body> <div id="div1"></div> <script type="text/javascript"> var oDiv = document.getElementById('div1'); oDiv.onmouseover = function() { var json = { width: 600, height: 200, opacity: 30 }; startMove(this, json); }; oDiv.onmouseout = function() { var json = { width: 100, height: 100, opacity: 100 }; startMove(this, json); }; function getStyle(obj, attr) { if (obj.currentStyle) { return obj.currentStyle[attr]; } else { return getComputedStyle(obj, false)[attr]; } } function startMove(obj, json) { clearInterval(obj.timer); obj.timer = setInterval(function() { var bStop = true; for (var attr in json) { var cur = 0; if (attr === 'opacity') { cur = Math.round(parseFloat(getStyle(obj, attr)) * 100); } else { cur = parseInt(getStyle(obj, attr)); } var speed = (json[attr] - cur) / 10; speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); if (cur != json[attr]) {//凡是有未到達(dá)目標(biāo)點(diǎn)的,一律不讓定時(shí)器停下,否則有的屬性不能到達(dá)目標(biāo)值 bStop = false; } if (attr === 'opacity') { cur += speed; obj.style.filter = 'alpha(opacity:' + cur + ')'; obj.style.opacity = cur / 100;//Chrome,IE } else { obj.style[attr] = cur + speed + 'px'; } } //整個(gè)循環(huán)結(jié)束后,仍然保持著true,說明沒有沒到達(dá)目標(biāo)值的屬性,也就是都到了 if (bStop) { clearInterval(obj.timer);//說明所有的屬性都到達(dá)了目標(biāo)值 } }, 30); } </script> </body> </html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JS多物體 任意值 鏈?zhǔn)?緩沖運(yùn)動(dòng)
- JavaScript運(yùn)動(dòng)框架 多物體任意值運(yùn)動(dòng)(三)
- JavaScript運(yùn)動(dòng)框架 解決防抖動(dòng)問題、懸浮對(duì)聯(lián)(二)
- JavaScript運(yùn)動(dòng)框架 解決速度正負(fù)取整問題(一)
- javascript運(yùn)動(dòng)框架用法實(shí)例分析(實(shí)現(xiàn)放大與縮小效果)
- JS運(yùn)動(dòng)框架之分享側(cè)邊欄動(dòng)畫實(shí)例
- Javascript 完美運(yùn)動(dòng)框架(逐行分析代碼,讓你輕松了運(yùn)動(dòng)的原理)
- js運(yùn)動(dòng)框架_包括圖片的淡入淡出效果
- JavaScript 創(chuàng)建運(yùn)動(dòng)框架的實(shí)現(xiàn)代碼
- JavaScript運(yùn)動(dòng)框架 鏈?zhǔn)竭\(yùn)動(dòng)到完美運(yùn)動(dòng)(五)
相關(guān)文章
JavaScript中的this例題實(shí)戰(zhàn)總結(jié)詳析
使用JavaScript開發(fā)的時(shí)候,很多人多多少少都會(huì)被this的指向問題搞蒙圈,下面這篇文章主要給大家介紹了關(guān)于JavaScript中this例題實(shí)戰(zhàn)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06JS驗(yàn)證日期的格式Y(jié)YYY-mm-dd 具體實(shí)現(xiàn)
這篇文章介紹了JS對(duì)日期格式的驗(yàn)證實(shí)例,有需要的朋友可以參考一下2013-06-06在JavaScript 中按字母排序之如何在 JS 中按名稱排序
有時(shí)你可能有一個(gè)單詞數(shù)組,你想按字母順序(從 a-z)對(duì)每個(gè)單詞進(jìn)行排序,或者你可能有一個(gè)包含用戶信息(包括名字)的對(duì)象數(shù)組,例如,你想按照用戶的名字來排序,接下來通過本文給大家介紹在JavaScript 中按字母排序之如何在 JS 中按名稱排序,需要的朋友可以參考下2023-09-09使用有限狀態(tài)機(jī)實(shí)現(xiàn)簡(jiǎn)版的html解析器
FSM(Finite State Machines) 有限狀態(tài)機(jī),也叫有限狀態(tài)自動(dòng)機(jī),是為研究有限內(nèi)存的計(jì)算過程和某些語言類而抽象出的一種計(jì)算模型,本文將使用有限狀態(tài)機(jī)實(shí)現(xiàn)一個(gè)簡(jiǎn)版的html解析器,有需要的小伙伴可以參考下2023-11-11微信小程序開發(fā)之實(shí)現(xiàn)一個(gè)跑步小程序
本文將開發(fā)一個(gè)簡(jiǎn)易的微信跑步小程序,用到的方法是wx.onLocationChange,可以監(jiān)聽實(shí)時(shí)地理位置變化事件,感興趣的小伙伴可以了解一下2022-08-08javascript 處理HTML元素必須避免使用的一種方法
我們?cè)诰帉懬芭_(tái)頁面的時(shí)候,可能經(jīng)常會(huì)用到“javascript+數(shù)據(jù)”生成頁面元素的方法,但當(dāng)我們要處理的數(shù)據(jù)量較大,導(dǎo)致頁面需要展現(xiàn)過多的控件的時(shí)候,頁面的響應(yīng)速度也會(huì)直線下降2009-07-07