多值動(dòng)畫封裝

在單值動(dòng)畫中,一次只能改變其中的單個(gè)量,比如left、width、height~~~
如果需要一次改變多的量,就需要傳入多個(gè)變量,在多變量傳輸中,一般選擇用數(shù)組或者json。這里選擇用json的鍵值對(duì)便于程序的開發(fā)和維護(hù)。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {  margin: 0;  padding: 0;  }
        div{  width: 100px;  height: 100px;  background: red;  position: absolute;  }
    </style>
</head>
<body>
<button id="btn">開始動(dòng)畫</button>
<!--<button id="btn1">改變高度</button>-->
<div id="box"></div>
<script>
    window.onload = function () {
        function $(TagId){return document.getElementById(TagId);}
        var box=$("box");
        var btn=$("btn");
        var btn1=$("btn1");
        btn.onclick=function(){
            buffer(box,{width:400,left:400,height:400})
        };
        function buffer(obj,json){
            clearInterval(obj.timer);

                obj.timer = setInterval(function () {
                    for(var key in json ) {
                        var begin = parseInt(getCss(obj, key));
                        var target = parseInt(json[key]);
                        var speed = (target - begin) / 10;
                        speed = target > begin ? Math.ceil(speed) : Math.floor(speed);
                        begin = begin + speed;
                        box.style[key] = begin + "px";
                        if (begin == target) {
                            clearInterval(obj.timer)
                        }
                    }
                }, 20)
        }
        function getCss(obj,attr){
            if(obj.currentStyle){
                return  obj.currentStyle[attr];
            }else{
                return   window.getComputedStyle(obj,null)[attr];
            }
        }
    }
</script>
</body>
</html>
  • 在多值動(dòng)畫會(huì)存在一個(gè)問題:如果其中一個(gè)值在滿足if (begin == target)條件后,會(huì)被立刻清空定時(shí)器。而停止動(dòng)畫,而其余只無法達(dá)到目標(biāo)值。
利用布爾條件設(shè)置一個(gè)判定條件來將定時(shí)器清空
       function buffer(obj,json){
            clearInterval(obj.timer);
                obj.timer = setInterval(function () {
                    var flag=true;
                    for(var key in json ) {
                        var begin = parseInt(getCss(obj, key));
                        var target = parseInt(json[key]);
                        var speed = (target - begin) / 10;
                        speed = target > begin ? Math.ceil(speed) : Math.floor(speed);
                        begin = begin + speed;
                        box.style[key] = begin + "px";
                        if(begin!=target)
                        {flag=false;
                    }
                          if (flag==true) {
                            clearInterval(obj.timer)
                        }
                }, 20)
        }
  • 特殊情況考慮:函數(shù)回調(diào);

在某些特殊情況下,動(dòng)畫需要復(fù)原,或者需要連續(xù)運(yùn)動(dòng),會(huì)使用到一個(gè)函數(shù)回調(diào)的概念。

 function buffer(obj, json, fn) {
            clearInterval(obj.timer);
            obj.timer = setInterval(function () {
                var flag = true;
                for (var key in  json) {
                    var begin = parseInt(getCssAttr(obj, key));
                    var target = parseInt(json[key]);
                    var speed = (target - begin) * 0.2;
                    speed = target > obj.offsetLeft ? Math.ceil(speed) : Math.floor(speed);
                    obj.style[key] = begin + speed + 'px';
                    if (begin != target) {
                        flag = false;
                    }
                }
                if (flag == true) {
                    clearInterval(obj.timer);
                    if (fn) {
                        fn();
                    }
                }
            }, 20)
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • //獲取屏幕滾動(dòng)的寬高 functionscroll() { //判斷是否是ie以及新的版本 if(window....
    加號(hào)_ZSL閱讀 370評(píng)論 0 0
  • /** Created by Administrator on 2017/4/26.*/ /** 勻速運(yùn)動(dòng)框架 @...
    康軒閱讀 142評(píng)論 0 0
  • 常見的取整函數(shù)的認(rèn)識(shí) 向上取整函數(shù)如果是正數(shù),那么向上取整得到的是絕對(duì)值大的如果是負(fù)數(shù),那么向上取整得到的是絕對(duì)值...
    GodlinE閱讀 163評(píng)論 0 0
  • 單例模式 適用場(chǎng)景:可能會(huì)在場(chǎng)景中使用到對(duì)象,但只有一個(gè)實(shí)例,加載時(shí)并不主動(dòng)創(chuàng)建,需要時(shí)才創(chuàng)建 最常見的單例模式,...
    Obeing閱讀 2,315評(píng)論 1 10
  • 工作時(shí)沒事做太痛苦 讀研有一年了,可是每到工作匯報(bào)還是沒有什么可以匯報(bào)的,唉,站在講臺(tái)前,兩眼淚汪汪。我真的閑得蛋...
    星期二的下午白茫茫閱讀 170評(píng)論 0 0

友情鏈接更多精彩內(nèi)容