超简单,几行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>
相关推荐
Peter 谭2 小时前
React Hooks 实现原理深度解析:从基础到源码级理解
前端·javascript·react.js·前端框架·ecmascript
周胡杰3 小时前
鸿蒙接入flutter环境变量配置windows-命令行或者手动配置-到项目的创建-运行demo项目
javascript·windows·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
乌夷4 小时前
axios结合AbortController取消文件上传
开发语言·前端·javascript
wuyijysx5 小时前
JavaScript grammar
前端·javascript
大鱼前端7 小时前
Vue 3.5 :新特性全解析与开发实践指南
vue.js
学渣y7 小时前
React状态管理-对state进行保留和重置
javascript·react.js·ecmascript
_龙衣7 小时前
将 swagger 接口导入 apifox 查看及调试
前端·javascript·css·vue.js·css3
struggle20259 小时前
continue通过我们的开源 IDE 扩展和模型、规则、提示、文档和其他构建块中心,创建、共享和使用自定义 AI 代码助手
javascript·ide·python·typescript·开源
x-cmd9 小时前
[250512] Node.js 24 发布:ClangCL 构建,升级 V8 引擎、集成 npm 11
前端·javascript·windows·npm·node.js
夏之小星星9 小时前
el-tree结合checkbox实现数据回显
前端·javascript·vue.js