欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Vue2實(shí)現(xiàn)數(shù)字縱向滾動(dòng)效果

 更新時(shí)間:2024年03月19日 08:29:05   作者:芝麻小仙女  
這篇文章主要為大家詳細(xì)介紹了如何基于Vue2實(shí)現(xiàn)數(shù)字縱向滾動(dòng)效果,從而達(dá)到顯示計(jì)時(shí)器滾動(dòng)效果,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

需求:

在頁(yè)面中顯示一個(gè)數(shù)字,并在進(jìn)入視口時(shí)顯示計(jì)時(shí)器滾動(dòng)效果:

效果如上

實(shí)現(xiàn)代碼

新建組件ScrollNumber.vue:

<template>
  <div
    style="
      display: inline-flex;
      justify-content: flex-start;
      align-items: center;
    "
  >
    <div
      v-for="(item, index) in numberList"
      :key="index"
      style="
        display: inline-flex;
        justify-content: flex-start;
        align-items: center;
        padding-bottom: 0.3rem;
        box-sizing: border-box;
      "
    >
      <span v-if="isNaN(item)">{{ item }}</span>
      <div class="number" v-else>
        <span
          class="number-item"
          ref="numberItem"
          :data-number="item"
          :data-index="index"
          >0123456789</span
        >
      </div>
    </div>
  </div>
</template>
 
<script>
export default {
  name: "ScrollNumber",
  props: {
    value: {
      type: [String, Number],
      default: 0,
    },
  },
  watch: {
    value(newVal) {
      if (newVal) {
        this.$nextTick(() => {
          this.setNumberTransform();
        });
      }
    },
  },
  computed: {
    numberList() {
      return String(this.value).split("");
    },
  },
  data() {
    return {
      hasShow: false, // 是否已展示過(guò)動(dòng)畫
    };
  },
  mounted() {
    window.addEventListener("scroll", this.scrollHandle, true); // 監(jiān)聽(tīng) 監(jiān)聽(tīng)元素是否進(jìn)入/移出可視區(qū)域
  },
 
  methods: {
    scrollHandle() {
      const offset = this.$el.getBoundingClientRect();
      const offsetTop = offset.top;
      const offsetBottom = offset.bottom;
      // 進(jìn)入可視區(qū)域
      if (offsetTop <= window.innerHeight && offsetBottom >= 0) {
        this.setNumberTransform();
        this.hasShow = true;
        window.removeEventListener("scroll", this.scrollHandle, true);
      } else {
        // 移出可視區(qū)域
        if (this.hasShow) {
          window.removeEventListener("scroll", this.scrollHandle, true);
        }
      }
    },
    // 設(shè)置每一位數(shù)字的偏移
    setNumberTransform() {
      let numberItems = this.$refs.numberItem;
      let obj = {};
      Array.from(numberItems).forEach((c) => {
        let key = c.dataset.index;
        let value = c.dataset.number;
        let init = 0;
        obj[key] = setInterval(() => {
          if (init < value * 10) {
            init += 1;
            c.style.transform = `translateY(-${init}%)`;
          } else {
            clearInterval(obj[key]);
            obj[key] = null;
          }
        }, 8);
      });
    },
  },
};
</script>
 
<style scoped lang="less">
.number {
  width: 0.42rem;
  height: 0.62rem;
  font-size: 0.56rem;
  font-weight: 800;
  color: #ffe52c;
  text-align: center;
  overflow: hidden;
  line-height: 0.42rem;
  > span {
    text-align: center;
    writing-mode: vertical-rl;
    text-orientation: upright;
    transform: translateY(0%);
  }
}
</style>

使用:

import ScrollNumber from "../ScrollNumber/ScrollNumber.vue";
<scroll-number :value="num.toString()"></scroll-number>

到此這篇關(guān)于基于Vue2實(shí)現(xiàn)數(shù)字縱向滾動(dòng)效果的文章就介紹到這了,更多相關(guān)Vue2數(shù)字縱向滾動(dòng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • elementUI table如何給表頭添加氣泡顯示

    elementUI table如何給表頭添加氣泡顯示

    這篇文章主要介紹了elementUI table如何給表頭添加氣泡顯示問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • vue內(nèi)置指令詳解

    vue內(nèi)置指令詳解

    指令是Vue模板中最常用的一項(xiàng)功能,它帶有前綴v-,主要職責(zé)是當(dāng)其表達(dá)式的值改變時(shí),相應(yīng)的將某些行為應(yīng)用在 DOM 上。這篇文章主要介紹了vue內(nèi)置指令詳解,需要的朋友可以參考下
    2018-04-04
  • vue-cli 默認(rèn)路由再子路由選中下的選中狀態(tài)問(wèn)題及解決代碼

    vue-cli 默認(rèn)路由再子路由選中下的選中狀態(tài)問(wèn)題及解決代碼

    這篇文章主要介紹了vue-cli 默認(rèn)路由再子路由選中下的選中狀態(tài)問(wèn)題及解決代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • vue如何實(shí)現(xiàn)垂直居中

    vue如何實(shí)現(xiàn)垂直居中

    這篇文章主要介紹了vue如何實(shí)現(xiàn)垂直居中,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue3中markRaw示例詳解

    vue3中markRaw示例詳解

    markRaw是將一個(gè)對(duì)象標(biāo)記為普通對(duì)象,而toRaw是將reactive對(duì)象變?yōu)槠胀▽?duì)象,在 Vue 3 中,markRaw 是一個(gè)用于告訴 Vue 的響應(yīng)性系統(tǒng)不要對(duì)某個(gè)對(duì)象進(jìn)行轉(zhuǎn)換或追蹤其響應(yīng)性的函數(shù),下面給大家介紹vue3中markRaw詳解,感興趣的朋友一起看看吧
    2024-04-04
  • vue?ui的安裝步驟以及使用詳解

    vue?ui的安裝步驟以及使用詳解

    最近公司開發(fā)一個(gè)項(xiàng)目,采用的前后端分離的方式,前端采用vue,但是再項(xiàng)目開發(fā)過(guò)程中遇到一個(gè)比較麻煩的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于vue?ui的安裝步驟以及使用的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • vue-axios的使用以及axios請(qǐng)求賦值為空的問(wèn)題

    vue-axios的使用以及axios請(qǐng)求賦值為空的問(wèn)題

    這篇文章主要介紹了vue-axios的使用以及axios請(qǐng)求賦值為空的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • vue中組件傳值的常見(jiàn)方式小結(jié)

    vue中組件傳值的常見(jiàn)方式小結(jié)

    在 Vue.js 中,組件之間的數(shù)據(jù)傳遞是一個(gè)常見(jiàn)的需求,Vue 提供了多種方法來(lái)實(shí)現(xiàn)這一目標(biāo),包括 props、全局事件總線、消息的訂閱與發(fā)布等,下面我們就來(lái)學(xué)習(xí)一下這些方法的具體實(shí)現(xiàn)吧
    2023-12-12
  • Vue通過(guò)axios發(fā)送ajax請(qǐng)求基礎(chǔ)演示

    Vue通過(guò)axios發(fā)送ajax請(qǐng)求基礎(chǔ)演示

    這篇文章主要介紹了Vue通過(guò)axios發(fā)送ajax請(qǐng)求基礎(chǔ)演示,包括了axios發(fā)送簡(jiǎn)單get請(qǐng)求,axios get傳參,axios發(fā)送post請(qǐng)求等基礎(chǔ)代碼演示需要的朋友可以參考下
    2023-02-02
  • 簡(jiǎn)單聊一聊Vue3組件更新過(guò)程

    簡(jiǎn)單聊一聊Vue3組件更新過(guò)程

    我們不光要學(xué)會(huì)Vue的組件化實(shí)現(xiàn)過(guò)程,還要懂得組件數(shù)據(jù)發(fā)生變化,更新組件的過(guò)程,這篇文章主要給大家介紹了關(guān)于Vue3組件更新過(guò)程的相關(guān)資料,需要的朋友可以參考下
    2022-04-04

最新評(píng)論