JS高級(jí)運(yùn)動(dòng)實(shí)例分析
本文實(shí)例分析了JS高級(jí)運(yùn)動(dòng)。分享給大家供大家參考,具體如下:
一、鏈?zhǔn)竭\(yùn)動(dòng)框架
1.他需要一個(gè)回調(diào)函數(shù),在運(yùn)動(dòng)停止時(shí),開始下一次運(yùn)動(dòng)(執(zhí)行函數(shù))
多物體運(yùn)動(dòng)框架改為如下:
function startMove(obj,attr,iTarget,fn){ ... if(iCur==iTarget){ clearInterval(obj.timer); fn(); }... };
然后就可以用它,比如先變寬再變高最后變透明度
startMove(this,'width',300,function(){ startMove(this,'height',300,function(){ startMove(this,'opacity',100); }); });
二、完美運(yùn)動(dòng)框架
1.原本多物體運(yùn)動(dòng)框架的缺陷
比如要讓他寬度高度同時(shí)變300,這樣寫:
startMove(this,'width',300); startMove(this,'height',300);
問題:只有高度變300了(因?yàn)閷挾葴?zhǔn)備運(yùn)動(dòng)時(shí)會(huì)開一個(gè)定時(shí)器,這個(gè)定時(shí)器還沒開始運(yùn)動(dòng)前,執(zhí)行高度變化的運(yùn)動(dòng),就把之前的定時(shí)器關(guān)了)
2.for in
for(i=0;i<=arr.length;i++)和for(i in arr)效果一樣
①什么時(shí)候用for什么時(shí)候用for...in呢?
數(shù)組:兩個(gè)都可以用 Json:只能用for...in(因?yàn)镴son下標(biāo)沒有規(guī)律,沒有l(wèi)ength可言)
對(duì)數(shù)組而言for...in循環(huán)不靈活,因?yàn)閒or循環(huán)可以從1可以從2等等任意數(shù)字開始,而for...in一循環(huán)就全部
②for in小應(yīng)用
function setStyle(obj,attr,value){ obj.style[attr]=value; }; setStyle(oDiv,'width','300px'); setStyle(oDiv,'height','300px'); setStyle(oDiv,'background','green');
=====>
function setStyle(obj,json){ var attr=''; for(attr in json){ obj.style[attr]=json[attr]; } }; setStyle(oDiv,{width:'300px',height:'300px',background:'green'});
③多物體運(yùn)動(dòng)框架改進(jìn)
function startMove(obj,json,fn){ clearInterval(obj.timer); obj.timer=setInterval(function(){ for(var attr in json){ if(attr=='opacity'){ var iCur=parseInt(parseFloat(getStyle(obj,attr))*100); } else{ var iCur=parseInt(getStyle(obj,attr)); } var iSpeed=(json[attr]-iCur)/8; iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed); if(iCur==json[attr]){ clearInterval(obj.timer); if(fn){ fn(); //有傳函數(shù)這個(gè)參數(shù)才執(zhí)行,不然會(huì)出錯(cuò) } } else{ if(attr=='opacity'){ obj.style.filter='alpha(opacity:'+(iCur+iSpeed)+')'; obj.style.opacity=(iCur+iSpeed)/100; } else{ obj.style[attr]=iCur+iSpeed+'px' } } } },30); };
這樣還有個(gè)問題
if(iCur==json[attr]){ clearInterval(obj.timer); }
只要json里有任一值到達(dá)目標(biāo),計(jì)時(shí)器就停止
比如我讓寬度變到103,高度變到300,那高度到不了300就停止了
解決方案
function startMove(obj,json,fn){ clearInterval(obj.timer); obj.timer=setInterval(function(){ var bStop=true; //先定義一個(gè)值,假設(shè)所有值都到了 for(var attr in json){ if(attr=='opacity'){ var iCur=parseInt(parseFloat(getStyle(obj,attr))*100); } else{ var iCur=parseInt(getStyle(obj,attr)); } var iSpeed=(json[attr]-iCur)/8; iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed); if(iCur!=json[attr]){ bStop=false; //并不是所有值都到了,就把bStop設(shè)成 false } if(attr=='opacity'){ obj.style.filter='alpha(opacity:'+(iCur+iSpeed)+')'; obj.style.opacity=(iCur+iSpeed)/100; } else{ obj.style[attr]=iCur+iSpeed+'px' } } if(bStop){ //所有值都到了,關(guān)閉定時(shí)器 clearInterval(obj.timer); if(fn){ fn(); //有傳函數(shù)這個(gè)參數(shù)才執(zhí)行,不然會(huì)出錯(cuò) } } },30); };
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript運(yùn)動(dòng)效果與技巧匯總》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript動(dòng)畫特效與技巧匯總》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- JS實(shí)現(xiàn)多物體緩沖運(yùn)動(dòng)實(shí)例代碼
- JS多物體 任意值 鏈?zhǔn)?緩沖運(yùn)動(dòng)
- javascript多物體運(yùn)動(dòng)實(shí)現(xiàn)方法分析
- Javascript 多物體運(yùn)動(dòng)的實(shí)現(xiàn)
- JavaScript緩沖運(yùn)動(dòng)實(shí)現(xiàn)方法(2則示例)
- js實(shí)現(xiàn)緩沖運(yùn)動(dòng)效果的方法
- JavaScript中的勻速運(yùn)動(dòng)和變速(緩沖)運(yùn)動(dòng)詳細(xì)介紹
- JS碰撞運(yùn)動(dòng)實(shí)現(xiàn)方法詳解
- JS彈性運(yùn)動(dòng)實(shí)現(xiàn)方法分析
- javascript鼠標(biāo)跟隨運(yùn)動(dòng)3種效果(眼球效果,蘋果菜單,方向跟隨)
- Js實(shí)現(xiàn)簡(jiǎn)單的小球運(yùn)動(dòng)特效
- JS多物體實(shí)現(xiàn)緩沖運(yùn)動(dòng)效果示例
相關(guān)文章
JS如何實(shí)現(xiàn)基于websocket的多端橋接平臺(tái)
我們?cè)谡{(diào)試過程使用的工具有:modheader,postman等,但這些工具都會(huì)存在的問題:缺少客戶端里相應(yīng)的設(shè)備信息;即使將cookie信息復(fù)制出來,也是存在過期的問題;多個(gè)設(shè)備之間切換時(shí)不方便;針對(duì)這些存在的問題,我基于websocket雙向通信的特點(diǎn),實(shí)現(xiàn)了多端橋接管理平臺(tái)2021-05-05微信小程序?qū)崿F(xiàn)時(shí)間預(yù)約功能
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)時(shí)間預(yù)約基本功能,一個(gè)類似電商的時(shí)間預(yù)約功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11JavaScript對(duì)象屬性操作實(shí)例解析
這篇文章主要介紹了JavaScript對(duì)象屬性操作實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02JavaScript獲取時(shí)間戳的方法總結(jié)
JavaScript獲得時(shí)間戳的方法有五種,后四種都是通過實(shí)例化時(shí)間對(duì)象new Date() 來進(jìn)一步獲取當(dāng)前的時(shí)間戳,下面我們就一起學(xué)習(xí)一下具體獲取的方法吧2023-09-09用js實(shí)現(xiàn)的仿sohu博客更換頁面風(fēng)格(簡(jiǎn)單版)
用js實(shí)現(xiàn)的仿sohu博客更換頁面風(fēng)格(簡(jiǎn)單版)...2007-03-03