超简单,几行js代码就实现一个 vue3 的数字滚动效果!

预览效果

1. 创建一个template

js 复制代码
<template>
  <div class="num-warp">
    <template v-for="item in numStr">
      <div v-if="item === ','" class="dot">,</div>
      <div
        v-else
        class="num-box"
        :style="{
          transform: ` translateY(${-sh * Number(item)}px)`,
        }"
      >
        <span v-for="i in 10"> {{ i - 1 }} </span>
      </div>
    </template>
  </div>
</template>

2 实现js逻辑部分

ts 复制代码
<script setup lang="ts">
// 这个没有做成组件,做成组件的话,自己稍微改改
import { computed, onMounted, ref } from "vue";

// 基础数据源,或者外部传入
const num = ref(15481245784544);
// 这个是滚动的高度,也就是一个span元素的默认高度,设置的文字大小不同,这个元素的高度也不同,你可以动态计算,我是直接控制台鼠标点击查看的元素大小,比较省事
const sh = ref(60);

// 转化成千分位
const numStr = computed(() => {
  return num.value.toLocaleString();
});

// 这是个测试代码
onMounted(() => {
  setInterval(() => {
    num.value = Math.floor(Math.random() * 100000000000000);
  }, 2000);
});
</script>

实现样式

css 复制代码
<style scoped>
.dot {
  font-size: 40px;
}
.num-warp {
  display: flex;
  height: 60px;
  overflow-y: hidden;
  line-height: 60px;
}
.num-box {
  display: flex;
  flex-direction: column;
  font-size: 40px;
  margin: 0 1px;
  transition: all 1s;
}
</style>
相关推荐
牧羊狼的狼2 小时前
React 中的 HOC 和 Hooks
前端·javascript·react.js·hooks·高阶组件·hoc
知识分享小能手4 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
luckys.one4 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
魔云连洲4 小时前
深入解析:Vue与React的异步批处理更新机制
前端·vue.js·react.js
mCell4 小时前
JavaScript 的多线程能力:Worker
前端·javascript·浏览器
weixin_437830946 小时前
使用冰狐智能辅助实现图形列表自动点击:OCR与HID技术详解
开发语言·javascript·ocr
前端工作日常7 小时前
我学习到的Vue2.6的prop修饰符
vue.js
gnip7 小时前
JavaScript事件流
前端·javascript
小菜全7 小时前
基于若依框架Vue+TS导出PDF文件的方法
javascript·vue.js·前端框架·json
wow_DG7 小时前
【Vue2 ✨】Vue2 入门之旅 · 进阶篇(一):响应式原理
前端·javascript·vue.js