亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

原生js封裝運(yùn)動(dòng)框架的示例講解

 更新時(shí)間:2017年10月01日 09:14:34   作者:May-J-Wang  
下面小編就為大家?guī)?lái)一篇原生js封裝運(yùn)動(dòng)框架的示例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

昨天我們說(shuō)了一下原生JS中常用的兼容性寫法,今天我們來(lái)說(shuō)一下運(yùn)動(dòng)框架.

正常情況下我們要寫一個(gè)運(yùn)動(dòng)的效果會(huì)用到tween.js這么一個(gè)插件,這個(gè)東西不是一般人寫出來(lái)的,因?yàn)槔锩嫔婕暗倪\(yùn)動(dòng)效果都是經(jīng)過(guò)一堆數(shù)學(xué)的函數(shù)運(yùn)算出來(lái)的,我們平常人是寫不出來(lái)的,所有我們就自己封裝一個(gè)運(yùn)動(dòng)框架,有什么問(wèn)題改起來(lái)也方便,下面我們就開(kāi)始封裝.

首先,我們先寫一個(gè)div,設(shè)置一些簡(jiǎn)單的樣式,我們就拿這個(gè)div舉例子

如下代碼:

#div{
  width: 100px;
  height: 100px;
  background: gold;
  position: absolute;
  left:0;
  top:0;
  opacity: 1;
}

然后我們就開(kāi)始寫js代碼了,如下:

window.onload=function() {

  var oDiv = document.getElementById("div");
  var timer;

寫一個(gè)函數(shù),方便以后用的時(shí)候直接調(diào)用就好了,首先先傳入幾個(gè)參(要運(yùn)動(dòng)的對(duì)象,變動(dòng)的屬性,終點(diǎn)距離,運(yùn)動(dòng)總時(shí)間,回調(diào)函數(shù))----今天的只是簡(jiǎn)單的封裝一下,你也寫可以傳入一個(gè)json

 

function move(obj,name, target, dur,fn) {
// 總步數(shù)=總時(shí)間÷計(jì)時(shí)器設(shè)定的時(shí)間
  var count = parseInt(dur / 30);
// 起始位置
  var start = parseFloat(setStyle(obj,name));
// 總距離=傳入的距離-起始距離
  var dis = target - start;
// 每步運(yùn)動(dòng)的距離=總距離÷總步數(shù)
  var spen = dis / count;
// 定義起始步數(shù)
  var n = 0;
  timer = setInterval(function () {
  n++;
// 把當(dāng)前運(yùn)動(dòng)的位置保存
  var cur=start + n * spen;
// 判斷屬性是不是透明度,透明度不用加單位
  if(name=='opacity'){
    obj.style[name]=cur;
// 兼容IE低版本,IE的透明度是1到100
    obj.style.filter='alpha('+cur*100+')';
  }else {
    obj.style[name] = start + n * spen + "px";
  }
// 判斷運(yùn)動(dòng)是否完成
  if (n == count) {
// 完成后清除定時(shí)器,停止運(yùn)動(dòng)
    clearInterval(timer);
// 判斷用戶是否傳入回調(diào)函數(shù)
    fn && fn();
  };
 }, 30);
};

 然后自己隨便寫一些調(diào)用回調(diào)函數(shù),測(cè)試一下:

oDiv.onclick=function(){
    move(oDiv,"left",600,1000,function(){
      move(oDiv,'top',400,1000,function(){
        move(oDiv,"width",300,1000,function(){
          move(oDiv,"opacity",0,1000);
        });
      });
    });
  };
// 獲取非行間樣式
  function setStyle(obj,name){
// 考慮兼容性問(wèn)題
    if(obj.currentStyle){//不兼容火狐和谷歌
      return obj.currentStyle[name];
    }else{
      return getComputedStyle(obj,false)[name];//不兼容IE
    };
  };
};

好了,今天就先封裝到這里了,這只是簡(jiǎn)單的封裝一下,明天我們會(huì)改進(jìn)一下,比如參數(shù)太多、參數(shù)順序不能亂的問(wèn)題,還有多次點(diǎn)擊計(jì)時(shí)器出現(xiàn)的Bug的問(wèn)題,如果你有好的方法歡迎評(píng)論區(qū)留言,程序員之間就是要相互學(xué)習(xí)的,明天見(jiàn),老鐵們!

以上這篇原生js封裝運(yùn)動(dòng)框架的示例講解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論