摘要:在這個(gè)完美運(yùn)動(dòng)框架中,我們可以只讓一個(gè)物體的一個(gè)屬性運(yùn)動(dòng),可以鏈?zhǔn)秸{(diào)用,也可以幾個(gè)屬性同時(shí)運(yùn)動(dòng)。能解決我們項(xiàng)目中遇到的大部分運(yùn)動(dòng)。運(yùn)動(dòng)框架演變過(guò)程運(yùn)動(dòng)實(shí)現(xiàn)留言板的例子完美運(yùn)動(dòng)運(yùn)動(dòng),高度展開發(fā)布
前面的運(yùn)動(dòng),每次只能改一個(gè)值,你改div的width的時(shí)候,就不能改div的高度,改高度的時(shí)候就不能改寬度,如果我的運(yùn)動(dòng)想同時(shí)改寬度和高度,怎么實(shí)現(xiàn)?
在這里我們把屬性和目標(biāo)值用json實(shí)現(xiàn)。
在這個(gè)完美運(yùn)動(dòng)框架中,我們可以只讓一個(gè)物體的一個(gè)屬性運(yùn)動(dòng),可以鏈?zhǔn)秸{(diào)用,也可以幾個(gè)屬性同時(shí)運(yùn)動(dòng)。能解決我們項(xiàng)目中遇到的大部分運(yùn)動(dòng)。
function getStyle(obj,name){ if(obj.currentStyle){ return obj.currentStyle[name]; } else{ return getComputedStyle(obj,false)[name]; } } function startMove(obj, json, fnEnd) { clearInterval(obj.timer); obj.timer = setInterval(function() { for(var attr in json){ var cur=0; if(attr==="opacity"){ cur=Math.round(parseFloat(getStyle(obj,attr))*100);//有可能會(huì)出現(xiàn)誤差0.07*100 } else{ cur=parseInt(getStyle(obj,attr)); } var speed = (json[attr] - cur) / 6; speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); if (cur === json[attr]) { clearInterval(obj.timer); if(fnEnd)fnEnd();//運(yùn)動(dòng)結(jié)束后,如果fnEnd參數(shù)傳遞進(jìn)去了就執(zhí)行fnEnd函數(shù) } else { if(attr==="opacity"){ obj.style.filter="alpha(opacity:"+cur+speed+")"; obj.style.opacity=(cur+speed)/100; }else{ obj.style[attr]=cur+speed+"px"; } } } }, 30) }用完美運(yùn)動(dòng)框架做一個(gè)寬高同時(shí)運(yùn)動(dòng)的實(shí)例
完美運(yùn)動(dòng)
如果我們直接按照上面的方式,當(dāng)我們運(yùn)行下面代碼的時(shí)候
startMove(oDiv,{width:101,height:300,opacity:100});
發(fā)現(xiàn)頁(yè)面是有問(wèn)題的,why?
if (cur === json[attr]) { clearInterval(obj.timer); if(fnEnd)fnEnd();//運(yùn)動(dòng)結(jié)束后,如果fnEnd參數(shù)傳遞進(jìn)去了就執(zhí)行fnEnd函數(shù) }
我們發(fā)現(xiàn)width先執(zhí)行完成,當(dāng)一個(gè)屬性執(zhí)行完成之后我們就關(guān)掉了定時(shí)器,所以沒有達(dá)到我們預(yù)期的效果。我們看看怎么解決。
我們可以判斷當(dāng)所有值都達(dá)到目標(biāo)點(diǎn)的時(shí)候在結(jié)束運(yùn)動(dòng)。
function getStyle(obj,name){ if(obj.currentStyle){ return obj.currentStyle[name]; } else{ return getComputedStyle(obj,false)[name]; } } function startMove(obj, json, fnEnd) { clearInterval(obj.timer); obj.timer = setInterval(function() { var bStop=true;//假設(shè):所有值都已經(jīng)執(zhí)行結(jié)束 for(var attr in json){ var cur=0; if(attr==="opacity"){ cur=Math.round(parseFloat(getStyle(obj,attr))*100);//有可能會(huì)出現(xiàn)誤差0.07*100 } else{ cur=parseInt(getStyle(obj,attr)); } var speed = (json[attr] - cur) / 6; speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); if(cur!=json[attr]){//假設(shè)有沒到目的地的值我們?cè)O(shè)置為false bStop=false; } if(attr==="opacity"){ obj.style.filter="alpha(opacity:"+cur+speed+")"; obj.style.opacity=(cur+speed)/100; }else{ obj.style[attr]=cur+speed+"px"; } } if (bStop) {//如果bStop為true代表值都到目的地,這時(shí)候我們才關(guān)定時(shí)器 clearInterval(obj.timer); if(fnEnd)fnEnd();//運(yùn)動(dòng)結(jié)束后,如果fnEnd參數(shù)傳遞進(jìn)去了就執(zhí)行fnEnd函數(shù) } }, 30) }測(cè)試?yán)尤缦?/b>
完美運(yùn)動(dòng)
到目前為止,我們可以在任何地方用我們的運(yùn)動(dòng)框架做運(yùn)動(dòng)效果。
運(yùn)動(dòng)框架演變過(guò)程 運(yùn)動(dòng)實(shí)現(xiàn)留言板的例子完美運(yùn)動(dòng)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/97241.html
摘要:運(yùn)動(dòng)框架動(dòng)起來(lái)進(jìn)行運(yùn)動(dòng)的節(jié)點(diǎn)定時(shí)器你沒看錯(cuò),就是那么簡(jiǎn)單。直接在定時(shí)器內(nèi)部,判斷到達(dá)目標(biāo)值,清除定時(shí)器就行拉運(yùn)動(dòng)框架運(yùn)動(dòng)終止進(jìn)行運(yùn)動(dòng)的節(jié)點(diǎn)運(yùn)動(dòng)終止條件。 轉(zhuǎn)自個(gè)人博客三省吾身丶丶原來(lái)是JS動(dòng)畫效果,但是我會(huì)過(guò)頭再看的時(shí)候,發(fā)現(xiàn)太粗略了,于是重新寫了一篇。喜歡別只收藏啊,點(diǎn)個(gè)推薦,大兄弟^ ^! 運(yùn)動(dòng)框架的實(shí)現(xiàn)思路 運(yùn)動(dòng),其實(shí)就是在一段時(shí)間內(nèi)改變left、right、width、hei...
摘要:仿滴滴出行項(xiàng)目最近,各大社區(qū)出現(xiàn)很多小伙伴的項(xiàng)目,趁著這股熱潮我也用擼了一個(gè)滴滴出行的項(xiàng)目。可是,后來(lái)在手機(jī)上發(fā)現(xiàn),輸入的時(shí)候居然調(diào)不出軟鍵盤,寫項(xiàng)目的時(shí)候沒考慮到設(shè)備問(wèn)題,簡(jiǎn)直是大大的失誤。也就是說(shuō)可以在組件內(nèi)部進(jìn)行請(qǐng)求,不需要提交。 Vue2.0 仿滴滴出行項(xiàng)目 最近,各大社區(qū)出現(xiàn)很多小伙伴的vue項(xiàng)目,趁著這股熱潮我也用vue擼了一個(gè)滴滴出行的項(xiàng)目。 效果預(yù)覽 showImg(h...
摘要:將不變的部分和變化的部分隔開是每個(gè)設(shè)計(jì)模式的主題,策略模式也不例外,策略模式的目的就是將算法的使用與算法的實(shí)現(xiàn)分離開來(lái)。 前言 本系列文章主要根據(jù)《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》整理而來(lái),其中會(huì)加入了一些自己的思考。希望對(duì)大家有所幫助。 文章系列 js設(shè)計(jì)模式--單例模式 js設(shè)計(jì)模式--策略模式 js設(shè)計(jì)模式--代理模式 概念 策略模式的定義是:定義一系列的算法,把它們一個(gè)...
摘要:學(xué)不動(dòng)了,那就來(lái)點(diǎn)有趣的本著折騰的性格,一直想寫一個(gè)完全由我個(gè)人完成的動(dòng)畫,終于在前段時(shí)間完成了的重寫,并完善了,先看看動(dòng)畫效果如何可以在這里查看不同動(dòng)畫組合成的效果,也可以在上查看具體的代碼編寫。 前言 這不 webpack 又升級(jí)了。。。 前端的發(fā)展可謂是異常的迅速,各大框架層出不窮,每當(dāng)有新框架出現(xiàn),或是老框架升級(jí),評(píng)論區(qū)總是哀嚎遍野,學(xué)不動(dòng)了,真的學(xué)不動(dòng)了。 學(xué)不動(dòng)了,那就來(lái)點(diǎn)...
摘要:學(xué)不動(dòng)了,那就來(lái)點(diǎn)有趣的本著折騰的性格,一直想寫一個(gè)完全由我個(gè)人完成的動(dòng)畫,終于在前段時(shí)間完成了的重寫,并完善了,先看看動(dòng)畫效果如何可以在這里查看不同動(dòng)畫組合成的效果,也可以在上查看具體的代碼編寫。 前言 這不 webpack 又升級(jí)了。。。 前端的發(fā)展可謂是異常的迅速,各大框架層出不窮,每當(dāng)有新框架出現(xiàn),或是老框架升級(jí),評(píng)論區(qū)總是哀嚎遍野,學(xué)不動(dòng)了,真的學(xué)不動(dòng)了。 學(xué)不動(dòng)了,那就來(lái)點(diǎn)...
閱讀 3329·2023-04-25 20:35
閱讀 3671·2019-08-30 15:54
閱讀 2061·2019-08-30 15:43
閱讀 2237·2019-08-29 15:14
閱讀 1956·2019-08-29 11:17
閱讀 3437·2019-08-26 13:36
閱讀 752·2019-08-26 10:15
閱讀 2918·2019-08-23 15:41