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

javascript原生封裝一個淡入淡出效果的函數(shù)測試實例代碼

 更新時間:2018年03月19日 11:29:33   作者:thomaszhou  
這篇文章主要介紹了javascript原生封裝一個淡入淡出效果的函數(shù),主要有FadeIn淡入函數(shù)和FadeOut淡出函數(shù),需要的朋友可以參考下

說到j(luò)s的漸變顯示與消失,多數(shù)朋友會想到JQuery里面的fadeIn()、fadeOut()或fadeToggle()。但如果僅僅是為了引入這樣的一個效果,而去調(diào)用了龐大JQuery庫?或者說我通過用原生js實現(xiàn)一些函數(shù)來提高自己~

所以,我簡單的研究了一下純js代碼寫淡入淡出的效果。

如果出現(xiàn)錯誤,請在評論中指出,我也好自己糾正自己的錯誤

 

(一)FadeIn淡入函數(shù)

淡入淡出的效果,其實就是一個setInterval(),加上循環(huán)的DOM操作,通過改變element對象節(jié)點的透明度,即可實現(xiàn)這種效果。

所以我們提取出兩個必要的東西:setInterval()、opacity、以及speed。

  • speed : 這個是我們設(shè)置opacity的值從0到1的float數(shù)值變化速度
  • 淡入的邏輯:opacity的值從0到1的float數(shù)值變化。

我們來先看代碼實現(xiàn)!

html:

<div id="div1"></div>
<span id="span1">123</span>
<button>fadein</button>
<button>fadeOut</button>

css樣式

<style>
 div {
  width: 100px;
  height: 100px;
  background-color: #1d7db1;
  opacity:0;
 }
 </style>

首先我們來看fadeIn函數(shù)的第一版的寫法:先了解一下實現(xiàn)的思路

function fadeIn(ele, speed) {
  let num = 0;
  let time = setInterval(() => {
    num += speed;
    ele.style.opacity = num / 100;
    if (num >= 100) {
     clearInterval(time); // 清楚定時器
    }
  }, 30);
  }
}

當(dāng)這個效果暫時實現(xiàn)以后,有些東西并沒有那么簡單。如果發(fā)生多次的觸發(fā)效果,會出現(xiàn)setInterval被多次同時使用,出現(xiàn)一些讓人頭疼的BUG。

要解決這個問題,目前有一個方案:添加一個全局狀態(tài),防止多次觸發(fā)setInterval。

let Fadeflag = true;
function fadeIn(ele, speed) {
  let num = 0;
  if (Fadeflag) {
  let time = setInterval(() => {
    num += speed;
    Fadeflag = false;
    ele.style.opacity = num / 100;
    if (num >= 100) {
     clearInterval(time);
     Fadeflag = true;
    }
  }, 30);
  }
}

兼容性問題?。?!

先看代碼

set: function(elem, num) {
  elem.style.opacity !== undefined ? elem.style.opacity = num / 100 : elem.style.filter = 'alpha(opacity = '+ num +')';
}

注:代碼設(shè)置num/100是因為我們以ie為標(biāo)準(zhǔn)去兼容ff和GG

js里面設(shè)置DOM節(jié)點透明度的函數(shù)屬性:filter= "alpha(opacity=" + value+ ")"(兼容ie)

ie的filter范圍是0~100

opacity=value/100(兼容FF和GG)。

FF和GG的opacity是0~1 (為了兼容ie的filter范圍,我們用num/100)

(二)FadeOut淡出函數(shù)

speed : 這個是我們設(shè)置opacity的值從1到0的float數(shù)值變化速度(記得考慮兼容性)

淡出的邏輯:opacity的值從1到0的float數(shù)值變化。

封裝函數(shù)

(function() {
  let fadeFlag = true;
  function Fade(selector) {
    this.elem = typeof selector == 'Object' ? selector : document.getElementById(selector);
  }
  Fade.prototype = {
   constructor: Fade,
    setOpacity: (elem, opacity) => { // 兼容ie10—
      elem.filters ? elem.style.filter = 'alpha(opacity = '+ opacity +')':  elem.style.opacity = opacity / 100;
      return true;
   },
   setOpacity: function(num) {
      this.elem.style.opacity !== undefined ? this.elem.style.opacity = num / 100 : this.elem.style.filter = 'alpha(opacity = '+ num +')';
   },
    fadeIn: function(speed, opacity){
   /*
   speed ==>淡入的速度,正整數(shù)(可選);
   opacity ==>淡入到指定的透明度,0~100(可選);
      */
      speed = speed || 2;
      opacity = opacity || 100;
      let num = 0; // 初始化透明度變化值為0
      if (fadeFlag) {
        let time = setInterval(() => {
          num += speed;
          fadeFlag = false;
          this.setOpacity(num);
          this.elem.style.opacity !== undefined ? this.elem.style.opacity = num / 100 : this.elem.style.filter = 'alpha(opacity = '+ num +')';
          if (num >= opacity) {
            clearInterval(time);
            fadeFlag = true;
          }
        }, 20);
      }
    },
    fadeOut: function(speed, opacity) {
   /*
   speed ==>淡入的速度,正整數(shù)(可選);
   opacity ==>淡入到指定的透明度,0~100(可選);
   */
      speed = speed || 2;
      opacity = opacity || 0;
      let num = 100; // 初始化透明度變化值為0
      if (fadeFlag) {
        let time = setInterval(() => {
          num -= speed;
          fadeFlag = false;
          this.set(num);
          this.elem.style.opacity !== undefined ? this.elem.style.opacity = num / 100 : this.elem.style.filter = 'alpha(opacity = '+ num +')';
          if (num <= opacity) {
          clearInterval(time);
          fadeFlag = true;
          }
        }, 20);
      }
    }
  };
window.Fade = Fade;
})();

測試實例:

let btn = document.getElementsByTagName('button')[0];
 let btn2 = document.getElementsByTagName('button')[1];
 btn.onclick = () => {
  let fade = new Fade('div1');
 fade.fadeIn();
 };
 btn2.onclick = () => {
  let fade = new Fade('div1');
  fade.fadeOut();
 }

總結(jié)

以上所述是小編給大家介紹的javascript原生封裝一個淡入淡出效果的函數(shù)測試實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • setTimeout的延時為0時多個瀏覽器的區(qū)別

    setTimeout的延時為0時多個瀏覽器的區(qū)別

    一直比較迷惑:js的setTimeout到底會在什么時候執(zhí)行,如果執(zhí)行了,和主執(zhí)行腳本到底差多長時間
    2012-05-05
  • 整理JavaScript創(chuàng)建對象的八種方法

    整理JavaScript創(chuàng)建對象的八種方法

    JavaScript創(chuàng)建對象的方法有很多種,本文給大家介紹javascript創(chuàng)建對象的八種方法,對javascript創(chuàng)建對象感興趣的朋友可以參考下本篇文章
    2015-11-11
  • layui操作列按鈕個數(shù)和文字顏色的判斷實例

    layui操作列按鈕個數(shù)和文字顏色的判斷實例

    今天小編就為大家分享一篇layui操作列按鈕個數(shù)和文字顏色的判斷實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JS使用ActiveXObject實現(xiàn)用戶提交表單時屏蔽敏感詞功能

    JS使用ActiveXObject實現(xiàn)用戶提交表單時屏蔽敏感詞功能

    這篇文章主要介紹了JS采用ActiveXObject實現(xiàn)用戶在提交表單時屏蔽敏感詞的功能的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • d3.js實現(xiàn)立體柱圖的方法詳解

    d3.js實現(xiàn)立體柱圖的方法詳解

    這篇文章主要給大家介紹了利用d3.js實現(xiàn)立體柱圖的方法,文中給出了詳細(xì)的介紹和示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來一起看看吧。
    2017-04-04
  • 如何將一維度數(shù)組轉(zhuǎn)換成三維數(shù)組結(jié)構(gòu)

    如何將一維度數(shù)組轉(zhuǎn)換成三維數(shù)組結(jié)構(gòu)

    在開發(fā)過程中,可能會遇到需要將一維數(shù)組轉(zhuǎn)換為多維數(shù)組的情況,以滿足特定數(shù)據(jù)結(jié)構(gòu)的需求,文章介紹了如何將后端返回的一維列表數(shù)據(jù)通過編程方法轉(zhuǎn)換成三維數(shù)組結(jié)構(gòu),以適應(yīng)特定的UI展示需求,通過循環(huán)遍歷和數(shù)據(jù)重組的方式,可以有效地實現(xiàn)數(shù)組結(jié)構(gòu)的轉(zhuǎn)換
    2024-09-09
  • three.js利用gpu選取物體并計算交點位置的方法示例

    three.js利用gpu選取物體并計算交點位置的方法示例

    這篇文章主要給大家介紹了關(guān)于three.js利用gpu選取物體并計算交點位置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用three.js具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • underscore之function_動力節(jié)點Java學(xué)院整理

    underscore之function_動力節(jié)點Java學(xué)院整理

    因為underscore本來就是為了充分發(fā)揮JavaScript的函數(shù)式編程特性,所以也提供了大量JavaScript本身沒有的高階函數(shù)。本文重點給大家介紹underscore之function知識,感興趣的的朋友一起學(xué)習(xí)吧
    2017-07-07
  • 仿iPhone通訊錄制作小程序自定義選擇組件的實現(xiàn)

    仿iPhone通訊錄制作小程序自定義選擇組件的實現(xiàn)

    這篇文章主要介紹了仿iPhone通訊錄制作小程序自定義選擇組件的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • JavaScript在form表單中使用button按鈕實現(xiàn)submit提交方法

    JavaScript在form表單中使用button按鈕實現(xiàn)submit提交方法

    在form表單提交中,使用button來間接完成submit的提交更為靈活。接下來通過本文給大家介紹JavaScript在form表單中使用button按鈕實現(xiàn)submit提交方法,需要的朋友參考下吧
    2017-01-01

最新評論

留坝县| 天镇县| 昌都县| 百色市| 郧西县| 桦甸市| 股票| 巴楚县| 高陵县| 古丈县| 安徽省| 丽江市| 黄浦区| 西昌市| 大石桥市| 洪洞县| 道孚县| 新绛县| 德阳市| 左贡县| 辰溪县| 夹江县| 西和县| 西盟| 光泽县| 乌恰县| 佛冈县| 师宗县| 平果县| 讷河市| 河北省| 宁强县| 杨浦区| 团风县| 长丰县| 丹巴县| 公主岭市| 旅游| 茌平县| 西乌| 祁阳县|