91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

原生js封裝運動框架的示例講解

發布時間:2020-08-27 15:53:26 來源:腳本之家 閱讀:131 作者:May-J-Wang 欄目:web開發

昨天我們說了一下原生JS中常用的兼容性寫法,今天我們來說一下運動框架.

正常情況下我們要寫一個運動的效果會用到tween.js這么一個插件,這個東西不是一般人寫出來的,因為里面涉及的運動效果都是經過一堆數學的函數運算出來的,我們平常人是寫不出來的,所有我們就自己封裝一個運動框架,有什么問題改起來也方便,下面我們就開始封裝.

首先,我們先寫一個div,設置一些簡單的樣式,我們就拿這個div舉例子

如下代碼:

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

然后我們就開始寫js代碼了,如下:

window.onload=function() {

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

寫一個函數,方便以后用的時候直接調用就好了,首先先傳入幾個參(要運動的對象,變動的屬性,終點距離,運動總時間,回調函數)----今天的只是簡單的封裝一下,你也寫可以傳入一個json

 

function move(obj,name, target, dur,fn) {
// 總步數=總時間÷計時器設定的時間
  var count = parseInt(dur / 30);
// 起始位置
  var start = parseFloat(setStyle(obj,name));
// 總距離=傳入的距離-起始距離
  var dis = target - start;
// 每步運動的距離=總距離÷總步數
  var spen = dis / count;
// 定義起始步數
  var n = 0;
  timer = setInterval(function () {
  n++;
// 把當前運動的位置保存
  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";
  }
// 判斷運動是否完成
  if (n == count) {
// 完成后清除定時器,停止運動
    clearInterval(timer);
// 判斷用戶是否傳入回調函數
    fn && fn();
  };
 }, 30);
};

 然后自己隨便寫一些調用回調函數,測試一下:

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){
// 考慮兼容性問題
    if(obj.currentStyle){//不兼容火狐和谷歌
      return obj.currentStyle[name];
    }else{
      return getComputedStyle(obj,false)[name];//不兼容IE
    };
  };
};

好了,今天就先封裝到這里了,這只是簡單的封裝一下,明天我們會改進一下,比如參數太多、參數順序不能亂的問題,還有多次點擊計時器出現的Bug的問題,如果你有好的方法歡迎評論區留言,程序員之間就是要相互學習的,明天見,老鐵們!

以上這篇原生js封裝運動框架的示例講解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高邮市| 韶关市| 星子县| 扎鲁特旗| 新巴尔虎左旗| 阜阳市| 永和县| 泗阳县| 杂多县| 禹州市| 湘西| 瑞金市| 和政县| 安丘市| 新昌县| 临西县| 德清县| 中江县| 大厂| 和龙市| 神农架林区| 永年县| 宝山区| 诏安县| 龙口市| 长汀县| 缙云县| 乌海市| 陵川县| 梁河县| 滨州市| 光山县| 界首市| 竹北市| 锡林郭勒盟| 云霄县| 灵璧县| 甘孜县| 漳州市| 托克逊县| 松溪县|