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

溫馨提示×

溫馨提示×

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

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

JavaScript怎么實現余額數字滾動效果

發布時間:2022-03-11 16:45:37 來源:億速云 閱讀:390 作者:iii 欄目:web開發

這篇文章主要介紹“JavaScript怎么實現余額數字滾動效果”,在日常操作中,相信很多人在JavaScript怎么實現余額數字滾動效果問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JavaScript怎么實現余額數字滾動效果”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1.實現背景

上周在一個完成任務領取紅包的活動需求中,需要實現一個用戶點擊按鈕彈出領取紅包彈窗后,在關 閉彈窗返回原來的頁面時,頁面余額數字部分要展示一個每一位數字滾動后的效果。

因為之前沒做過這樣的效果,一開始也不知道要如何實現,本來想在GitHub上找一下相關的庫,看到一個最高star的庫,但發現它是依賴jQuery的,而且不可以npm包引入。感覺就很沒有必要,本來項目是react框架的,就是要盡量少的操作DOM,為了解決這個滾動就要引入jQuery,感覺不太合適。所以我決定還是自己實現,先看了一下別人的思路,然后自己再去實現。

2.實現思路

其實就是將傳入的帶滾動的n位數字拆分成每一個要滾動的數,然后動態的創建裝著滾動到每一位相應數字的容器,然后放入傳入的目標容器中。滾動到每一位相應的數字的實現可以通過動態創建從0到相應數字的間隔數的div,div的內容分別為對應的數字,就像一個豎直寫著從0-n的長紙條,然后拉著它在指定時間內從0上拉到目標數字。

3.實現過程

既然要封裝,還是寫成class的形式吧,話不多說,直接上代碼吧

/**

 * 實現數字滾動的效果的類

 */

class DigitScroll {

  constructor(options) {

    //獲取容器的DOM,沒有則拋出錯誤

    this.container = document.querySelector(options.container);

    if (!this.container) {

      throw Error("no container");

    }

    this.container.style.overflow = "hidden";

    this.container.style.display = "flex";

    //可視容器高度 也是滾動間隔距離,容器要設置高度,否則默認30px

    this.rollHeight = parseInt(getComputedStyle(this.container).height) || 30;

    this.container.style.height = this.rollHeight + "px";

  }

  roll(num) {

    // 將傳入的要滾動的數字拆分后初始化每一位數字的容器

    this.initDigitEle(num);

    const numEles = this.container.querySelectorAll(".single-num");

    // 遍歷生成每一位數字的滾動隊列,如滾動到7,則生成內容為0,1,2,3,4,5,6,7的7個div,用于滾動動畫

    [...numEles].forEach((numEle, index) => {

      const curNum = 0;

      let targetNum = Number(this.numberArr[index]);

      if (curNum >= targetNum) {

        targetNum = targetNum + 10;

      }

      let cirNum = curNum;

      // 文檔碎片,拼湊好后一次性插入節點中

      const fragment = document.createDocumentFragment();

      // 生成從0到目標數字對應的div

      while (targetNum >= cirNum) {

        const ele = document.createElement("div");

        ele.innerHTML = cirNum % 10;

        cirNum++;

        fragment.appendChild(ele);

      }

      numEle.innerHTML = "";

      numEle.appendChild(fragment);

      //重置位置

      numEle.style.cssText +=

        "-webkit-transition-duration:0s;-webkit-transform:translateY(0)";

      setTimeout(() => {

        numEle.style.cssText += ——-webkit-transition-duration:1s;-webkit-transform:translateY(${

          -(targetNum - curNum) * this.rollHeight

        }px);——;

      }, 50);

    });

  }

  // 初始化容器

  initDigitEle(num) {

    // 數字拆分位數

    const numArr = num.toString().split("");

    // 文檔碎片,拼湊好后一次性插入節點中

    const fragment = document.createDocumentFragment();

    numArr.forEach((item) => {

      const el = document.createElement("div");

      // 數字是要滾動的,非數字如.是不滾動的

      if (/[0-9]/.test(item)) {

        el.className = "single-num";

        el.style.height = this.rollHeight + "px";

        el.style.lineHeight = this.rollHeight + "px";

      } else {

        el.innerHTML = item;

        el.className = "no-move";

        el.style.verticalAlign = "bottom";

      }

      // el.style.float='left';

      fragment.appendChild(el);

    }, []);

    this.container.innerHTML = "";

    this.container.appendChild(fragment);

    // 存儲滾動的數字

    this.numberArr = numArr.filter((item) => /[0-9]/.test(item));

  }

}

到此,關于“JavaScript怎么實現余額數字滾動效果”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

兴安县| 宿迁市| 勐海县| 连城县| 石台县| 阜阳市| 刚察县| 曲靖市| 新泰市| 保德县| 贡嘎县| 高邮市| 蓝山县| 淮南市| 那坡县| 永济市| 乌拉特前旗| 漾濞| 海门市| 大竹县| 康保县| 石楼县| 富锦市| 苍山县| 松阳县| 房产| 阳泉市| 娱乐| 黎平县| 县级市| 那曲县| 东源县| 额尔古纳市| 讷河市| 玉树县| 蒙阴县| 民丰县| 嘉善县| 乃东县| 西青区| 永嘉县|