最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript變速動畫函數(shù)封裝添加任意多個屬性

 更新時間:2019年04月03日 10:56:20   作者:py-小白  
這篇文章主要介紹了JavaScript變速動畫函數(shù)封裝添加任意多個屬性 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

下面通過實例代碼給大家介紹JavaScript變速動畫函數(shù)封裝添加任意多個屬性 ,具體代碼如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    div {
      width: 200px;
      height: 100px;
      background-color: pink;
      position: absolute;
    }
  </style>
</head>
<body>
<input type="button" id="bt" value="顯示效果"/>
<div id="dv"></div>
<script src="common.js"></script>
<script>
  //點擊按鈕,使元素的寬度到達(dá)一個值,高度到達(dá)一個值
  //獲取任意元素的任意屬性值
  function getStyle(element, attr) {
    //判斷瀏覽器是否支持這個方法
    return window.getComputedStyle ? window.getComputedStyle(element, null)[attr] : element.currentStyle[attr] || 0;
  }
  //使任意元素,改變多個值的大小
  function animate(element, json) {
    //清理定時器
    clearInterval(element.timeId);
    //創(chuàng)建定時器
    element.timeId = setInterval(function () {
      //默認(rèn)全部到達(dá)目標(biāo)
      var flag = true;
      //循環(huán)遍歷要改變的屬性和值
      for (var attr in json) {
        //過去該屬性的當(dāng)前的值
        var current = parseInt(getStyle(element, attr));
        //當(dāng)前屬性對應(yīng)的目標(biāo)值
        var target = json[attr];
        //移動的步數(shù)
        var step = (target - current) / 10;
        step = step > 0 ? Math.ceil(step) : Math.floor(step);
        current += step;//移動后的值
        element.style[attr] = current + "px";
        if (current != target) {
          flag = false;
        }
      }
      if (flag) {
        //清理定時器
        clearInterval(element.timeId);
      }
      //測試代碼
      console.log("目標(biāo):" + target + ",當(dāng)前:" + current + ",每次的移動步數(shù):" + step);
    }, 20)
  }
  my$("bt").onclick = function () {
    animate(my$("dv"), {"width": 300, "left": 100, "top": 50});
  };
</script>
</body>
</html>

common.js:

/**
 * Created by Administrator on 2018/8/18.
 */
/**
 * Created by Administrator on 2016/7/27.
 */
/**
 * Created by Administrator on 2016/7/21.
 *
 * 次文件來自 很牛x的程序員 .
 *
 * 作者:無名
 */
/*
 * 該函數(shù)是返回的是指定格式的日期,是字符串類型
 * 參數(shù):date ----日期
 * 返回值: 字符串類型的日期
 * */
function getDatetoString(date) {
  var strDate;//存儲日期的字符串
  //獲取年
  var year = date.getFullYear();
  //獲取月
  var month = date.getMonth() + 1;
  //獲取日
  var day = date.getDate();
  //獲取小時
  var hour = date.getHours();
  //獲取分鐘
  var minute = date.getMinutes();
  //獲取秒
  var second = date.getSeconds();
  hour = hour < 10 ? "0" + hour : hour;
  minute = minute < 10 ? "0" + minute : minute;
  second = second < 10 ? "0" + second : second;
  //拼接
  strDate = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;//隱藏問題,關(guān)于變量聲明的位置
  return strDate;
}
//根據(jù)id獲取元素對象
function my$(id) {
  return document.getElementById(id);
}
/*
 *
 * innerText屬性IE中支持
 * textContent火狐中支持
 * dvObj.innerText="您好";設(shè)置innerText的值
 * console.log(dvObj.innerText);獲取innerText的值
 * 因為上述原因,inerText有時候需要設(shè)置值,有時候需要獲取值
 * 所以,需要寫一個兼容的代碼能在火狐中使用,也可以在IE中使用
 *
 *
 * */
/*
 *設(shè)置innerText屬性的值
 * element-----為某個元素設(shè)置屬性值
 * content-----設(shè)置的值
 * */
function setInnerText(element, content) {
  if (typeof element.textContent === "undefined") {
    //IE瀏覽器
    element.innerText = content;
  } else {
    element.textContent = content;
  }
}
/*
 * 獲取innerText屬性的值
 * element 要獲取的元素
 * 返回的是該元素的innerText值
 * */
function getInnerText(element) {
  if (typeof element.textContent === "undefined") {
    //IE瀏覽器
    return element.innerText;
  } else {
    return element.textContent;
  }
}
//獲取當(dāng)前元素前一個元素
function getPreviousElement(element) {
  if (element.previousElementSibling) {
    return element.previousElementSibling;
  } else {
    var ele = element.previousSibling;
    while (ele && ele.nodeType !== 1) {
      ele = ele.previousSibling;
    }
    return ele;
  }
}
//獲取當(dāng)前元素的后一個元素
function getNextElement(element) {
  if (element.nextElementSibling) {
    return element.nextElementSibling;
  } else {
    var ele = element.nextSibling;
    while (ele && ele.nodeType !== 1) {
      ele = ele.nextSibling;
    }
    return ele;
  }
}
//獲取父元素中的第一個元素
function getFirstElementByParent(parent) {
  if (parent.firstElementChild) {
    return parent.firstElementChild;
  } else {
    var ele = parent.firstChild;
    while (ele && ele.nodeType !== 1) {
      ele = ele.nextSibling;
    }
    return ele;
  }
}
//獲取父元素中的最后一個元素
function getLastElementByParent(parent) {
  if (parent.lastElementChild) {
    return parent.lastElementChild;
  } else {
    var ele = parent.lastChild;
    while (ele && ele.nodeType !== 1) {
      ele = ele.previousSibling;
    }
    return ele;
  }
}
//獲取兄弟元素
function getsiblings(ele) {
  if (!ele)return;//判斷當(dāng)前的ele這個元素是否存在
  var elements = [];//定義數(shù)組的目的就是存儲當(dāng)前這個元素的所有的兄弟元素
  var el = ele.previousSibling;//當(dāng)前元素的前一個節(jié)點
  while (el) {
    if (el.nodeType === 1) {//元素
      elements.push(el);//加到數(shù)組中
    }
    el = el.previousSibling;
  }
  el = ele.nextSibling;
  while (el) {
    if (el.nodeType === 1) {
      elements.push(el);
    }
    el = el.nextSibling;
  }
  return elements;
}
//  //能力檢測多個瀏覽器為同一個對象注冊多個事件
var EventTools = {
  //為對象添加注冊事件
  addEventListener: function (element, eventName, listener) {
    if (element.addEventListener) {
      element.addEventListener(eventName, listener, false);
    } else if (element.attachEvent) {
      element.attachEvent("on" + eventName, listener)
    } else {
      element["on" + eventName] = listener;
    }
  },
  //為對象移除事件
  removeEventListener: function (element, eventName, listener) {
    if (element.removeEventListener) {
      element.removeEventListener(eventName, listener, false);
    } else if (element.detachEvent) {
      element.detachEvent("on" + eventName, listener);
    } else {
      element["on" + eventName] = null;
    }
  },
  //獲取參數(shù)e
  getEvent: function (e) {
    return e || window.event;
  },
  getPageX: function (e) {
    if (e.pageX) {
      return e.pageX;
    } else {
      //有的瀏覽器把高度設(shè)計在了文檔的第一個元素中了
      //有的瀏覽器把高度設(shè)計在了body中了
      //document.documentElement.scrollTop;//文檔的第一個元素
      //document.body.scrollTop;
      var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
      return e.clientX + scrollLeft;
    }
  },
  getPageY: function (e) {
    if (e.pageY) {
      return e.pageY;
    } else {
      var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
      return e.clientY + scrollTop;
    }
  }
};

補充:js 變速動畫函數(shù)

//獲取任意一個元素的任意一個屬性的當(dāng)前的值---當(dāng)前屬性的位置值
  function getStyle(element, attr) {
    return window.getComputedStyle ? window.getComputedStyle(element, null)[attr] : element.currentStyle[attr] || 0;
  }

//變速動畫函數(shù)封裝增加任意多個屬性和回調(diào)函數(shù)及層級還有透明度
  //element元素 json對象 存儲屬性與值 fn為回調(diào)函數(shù)
  function animate(element, json, fn) {
    //清理定時器
    clearInterval(element.timeid);
    //設(shè)置定時器
    element.timeid = setInterval(function () {
      //假設(shè)全部到達(dá)目標(biāo)
      var f = true;
      //循環(huán)去獲取傳入的數(shù)據(jù)
      for (var i in json) {
        //判斷傳入的值 是不是opacity
        if (i == 'opacity') {
          //獲取當(dāng)前opacity的值 并且放大100倍
          var current = getStyle(element, i) * 100;
          //把目標(biāo)值也放大100倍
          var target = json[i] * 100;
          //移動的步數(shù)
          var step = (target - current) / 10;
          //判斷是不是為0
          step = step > 0 ? Math.ceil(step) : Math.floor(step);
          //移動后的位置
          current += step;
          //移動元素屬性
          element.style[i] = current / 100;
          //判斷屬性是不是zIndex
        } else if (i == 'zIndex') {
          //直接設(shè)置zIndex
          element.style[i] = json[i];
        } else {
          //普通屬性獲?。ㄞD(zhuǎn)化成數(shù)字)
          var current = parseInt(getStyle(element, i));
          //目標(biāo)屬性值
          var target = json[i]
          //移動的步驟(漸變)
          var step = (target - current) / 10;
          //判斷移動的值取整
          step = step > 0 ? Math.ceil(step) : Math.floor(step);
          //移動后的位置
          current += step;
          //移動元素
          element.style[i] = current + 'px';
        }
        //只要有一個沒達(dá)到目標(biāo)就設(shè)置F為false
        if (current != target) {
          f = false;
        }
        //目標(biāo)到達(dá) 清理定時器 判斷有沒有回調(diào)函數(shù)
        if (f) {
          clearInterval(element.timeid);
          if (fn) {
            fn();
          }
        }
      }
      console.log("目標(biāo):" + target + ",當(dāng)前:" + current + ",每次的移動步數(shù):" + step);
    }, 20)
  }

總結(jié)

以上所述是小編給大家介紹的JavaScript變速動畫函數(shù)封裝添加任意多個屬性,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • JavaScript實現(xiàn)下載base64數(shù)據(jù)并兼容低版本

    JavaScript實現(xiàn)下載base64數(shù)據(jù)并兼容低版本

    這篇文章主要為大家詳細(xì)介紹了如何使用JavaScript實現(xiàn)下載base64數(shù)據(jù)并兼容低版本,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • setTimeout與setInterval的區(qū)別淺析

    setTimeout與setInterval的區(qū)別淺析

    這篇文章主要給大家介紹了關(guān)于setTimeout與setInterval區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 詳解如何用webpack打包一個網(wǎng)站應(yīng)用項目

    詳解如何用webpack打包一個網(wǎng)站應(yīng)用項目

    本篇文章主要介紹了如何用webpack打包一個網(wǎng)站應(yīng)用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • JavaScript 事件代理需要注意的地方

    JavaScript 事件代理需要注意的地方

    這篇文章主要介紹了JavaScript 事件代理需要注意的地方,幫助大家更好的理解和學(xué)習(xí)JavaScript,感興趣的朋友可以了解下
    2020-09-09
  • 微信小程序視頻彈幕位置隨機

    微信小程序視頻彈幕位置隨機

    這篇文章主要介紹了微信小程序視頻彈幕位置隨機,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 微信小程序?qū)崿F(xiàn)聯(lián)動選擇器

    微信小程序?qū)崿F(xiàn)聯(lián)動選擇器

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)聯(lián)動選擇器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • JS定時器如何實現(xiàn)提交成功提示功能

    JS定時器如何實現(xiàn)提交成功提示功能

    這篇文章主要介紹了JS定時器如何實現(xiàn)提交成功提示功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • JavaScript 接口原理與用法實例詳解

    JavaScript 接口原理與用法實例詳解

    這篇文章主要介紹了JavaScript 接口原理與用法,結(jié)合實例形式詳細(xì)分析了JavaScript 接口原理、優(yōu)缺點、用法及操作注意事項,需要的朋友可以參考下
    2020-05-05
  • JavaScript學(xué)習(xí)小結(jié)之使用canvas畫“哆啦A夢”時鐘

    JavaScript學(xué)習(xí)小結(jié)之使用canvas畫“哆啦A夢”時鐘

    這篇文章主要介紹了JavaScript學(xué)習(xí)小結(jié)之使用canvas畫“哆啦A夢”時鐘的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • php 解壓zip壓縮包內(nèi)容到指定目錄的實例

    php 解壓zip壓縮包內(nèi)容到指定目錄的實例

    下面小編就為大家分享一篇php 解壓zip壓縮包內(nèi)容到指定目錄的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01

最新評論

温州市| 新宾| 崇信县| 浦县| 林周县| 夹江县| 西乌珠穆沁旗| 和林格尔县| 正宁县| 田东县| 图木舒克市| 渝北区| 赫章县| 贞丰县| 徐水县| 颍上县| 金沙县| 开阳县| 凤山县| 横峰县| 赤水市| 泾源县| 金堂县| 郴州市| 双鸭山市| 金华市| 定南县| 马关县| 夏河县| 隆子县| 丰都县| 玉环县| 融水| 余庆县| 息烽县| 星子县| 开化县| 祁东县| 开远市| 临邑县| 江都市|