一.doMove函數(shù)封裝 抖原理 透明度封裝

doMove()

window.onload=function(){ 
    var oBtn1 = document.getElementById("btn1");
    var oDiv = document.getElementById("div1");
   oBtn1.onclick=function(){
       doMove(oDiv,'top',5,400,function(){
           doMove(oDiv,'left',3,800);
       });
   }
    oDiv.timer=null;
    function doMove(obj,attr,dir,target,endFn){
            dir=parseInt(getStyle(obj,attr))<target?dir:-dir;
            clearInterval(obj.timer);
            obj.timer=setInterval(function(){
                var speed=parseInt(getStyle(obj,attr))+dir;//步長
                if(speed>target && dir>0 || speed<target && dir<0) {speed=target}
                obj.style[attr]=speed+"px";
                if(speed==target) {
                    clearInterval(obj.timer);
                    endFn&&endFn();
                }

            },10);
    }
    function getStyle(obj,attr){return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj)[attr];}
}

<small>

  • 大概邏輯
  • doMove(對象,樣式屬性,步長,目標值,回調函數(shù))
  • 判斷步長 如果小于目標值 則為正數(shù),否則為負值
  • 使用之前先停止定時器 (為了防止每次點擊的時候 定時器在原有的基礎之上重復執(zhí)行)
  • 設置定時器函數(shù) 獲取現(xiàn)有的樣式屬性值加上步長
  • 判斷 如果速度大于目標值切步長為正數(shù) 或者 速度小于目標值且步長為負數(shù) 讓速度等于相對應的目標值(加上步長判斷為了防止點擊反方向按鈕 一次性回歸原位)
  • 然后直接將速度值賦給對象的style
  • 最后判斷: 如果速度值等于目標值,停止定時器; 與此同時 如果有回掉函數(shù),就執(zhí)行
    </small>

抖動原理及實現(xiàn)過程

window.onload=function(){
    var oImg=document.getElementById('img1');
    oImg.onclick=function(){
            var pos=parseInt(getStyle(oImg,'left'));
            var arr=[];
            var timer=null;
            var num=0;
            for(var i=20;i>0;i-=5){
                arr.push(i,-i);
            }
            arr.push(0);
           clearInterval(timer);
           timer=setInterval(function(){
               oImg.style.left=pos+arr[num]+"px";
               num++;
               if(num==arr.length){
                   clearInterval(timer)
               }
           },50);
    }
}

<small>

  • 抖動原理
  • 首先要有屬性樣式設定
  • 獲取樣式屬性值
  • 定義一個空數(shù)組
  • 定義一個空的定時器變量
  • 定義一個num為0
  • 遍歷抖動最大數(shù)值 從大到小 到0為止數(shù)值差自己設定 在遍歷過程中將i 壓入數(shù)組中
  • 遍歷結束 在arr數(shù)組中補0
  • 先清空定時器
  • 開啟定時器 設置對象樣式為原位置一一加上數(shù)組中的數(shù)值
  • num++推動著 (定時器每隔固定時間 就執(zhí)行一次++)
  • 知道num的數(shù)值等于數(shù)組的長度 停止定時器
    </small>

抖的函數(shù)封裝

shake(oImg,'top');
function shake(obj,attr,endFn){
    var pos=parseInt(getStyle(obj,attr));
    var arr=[];
    var num=0;
    for(var i=20;i>0;i-=5){arr.push(i,-i);  }
    arr.push(0);
    clearInterval(obj.time);
    obj.time=setInterval(function(){
        obj.style[attr]=pos+arr[num]+"px";
        num++;
        if(num==arr.length){
            clearInterval(obj.time);
            endFn&&endFn();
        }
    },50);
}

透明度的封裝

function opacity(obj, num, target, endFn) {
    
        num = getStyle(obj, 'opacity')*100 < target ? num : -num;
        
        clearInterval( obj.opacity );
        
        obj.opacity = setInterval(function () {
            
            var speed = parseInt(getStyle(obj, 'opacity')*100) + num;
            
            if ( speed > target && num > 0 || speed < target && num < 0 ) {
                speed = target;
            }
            
            obj.style.opacity = speed/100;
            obj.style.filter = 'alpha(opacity='+ speed +')';
            
            if ( speed == target ) {
                clearInterval( obj.opacity );
                endFn && endFn();
            }

        }, 20);
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坟冲,一起剝皮案震驚了整個濱河市秒梳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毒涧,老刑警劉巖灯帮,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瑞妇,死亡現(xiàn)場離奇詭異玛荞,居然都是意外死亡始腾,警方通過查閱死者的電腦和手機州刽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浪箭,“玉大人穗椅,你說我怎么就攤上這事∧唐埽” “怎么了匹表?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長驼抹。 經(jīng)常有香客問我桑孩,道長,這世上最難降的妖魔是什么框冀? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任流椒,我火速辦了婚禮,結果婚禮上明也,老公的妹妹穿的比我還像新娘宣虾。我一直安慰自己,他們只是感情好温数,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布绣硝。 她就那樣靜靜地躺著,像睡著了一般撑刺。 火紅的嫁衣襯著肌膚如雪鹉胖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音甫菠,去河邊找鬼挠铲。 笑死,一個胖子當著我的面吹牛寂诱,可吹牛的內(nèi)容都是我干的拂苹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼痰洒,長吁一口氣:“原來是場噩夢啊……” “哼瓢棒!你這毒婦竟也來了?” 一聲冷哼從身側響起丘喻,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤脯宿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后仓犬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗅绰,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年搀继,在試婚紗的時候發(fā)現(xiàn)自己被綠了窘面。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡叽躯,死狀恐怖财边,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情点骑,我是刑警寧澤酣难,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站黑滴,受9級特大地震影響憨募,放射性物質發(fā)生泄漏。R本人自食惡果不足惜袁辈,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一菜谣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晚缩,春花似錦尾膊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鸣皂,卻和暖如春抓谴,著一層夾襖步出監(jiān)牢的瞬間暮蹂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工齐邦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留椎侠,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓措拇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親慎宾。 傳聞我的和親對象是個殘疾皇子丐吓,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 上次給大家分享了《2017年最全的excel函數(shù)大全(2)——web函數(shù)》,這次分享給大家查找和引用函數(shù)(上)趟据。 ...
    幸福的耗子閱讀 4,637評論 1 5
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理券犁,服務發(fā)現(xiàn),斷路器汹碱,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • PHP常用函數(shù)大全 usleep() 函數(shù)延遲代碼執(zhí)行若干微秒粘衬。 unpack() 函數(shù)從二進制字符串對數(shù)據(jù)進行解...
    上街買菜丶迷倒老太閱讀 1,352評論 0 20
  • 上班是一件很慘的事,更慘的是坐公交車上班咳促,最慘的是坐爆擠的公交車上班稚新。 爆擠是什么樣的盛況,人像春聯(lián)一樣貼門上跪腹,太...
    大金爺閱讀 308評論 1 0
  • 1褂删、選擇:學會做出選擇,不管是身邊的朋友冲茸,還是自己感興趣的事屯阀,亦或是不愿意做但必須要做的事,都學會了用最好的方法去...
    嗯我是lina啊閱讀 218評論 0 0