【vue】 vue2 | js 实现数字滚动效果

简介: 【vue】 vue2 | js 实现数字滚动效果

效果

vue 代码

<template>
  <div class="outer">
    <div class="counter-container">
      <i class="iconfont icon-Basket-Ball" style="font-size: 50px"></i>
      <div class="counter" :data-set="num1"></div>
      <span>法律文献</span>
    </div>

    <div class="counter-container">
      <i class="iconfont icon-BasketballHoop" style="font-size: 50px"></i>
      <div class="counter" :data-set="num2"></div>
      <span>司法规章</span>
    </div>

    <div class="counter-container">
      <i class="iconfont icon-assistant" style="font-size: 50px"></i>
      <div class="counter" :data-set="num3"></div>
      <span> 交通规章</span>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      num1: 37062,
      num2: 37062,
      num3: 37062,
    };
  },
  mounted() {
    this.startFn();
  },
  methods: {
    startFn() {
      let counters = document.querySelectorAll(".counter"); //获取到三个counter盒子
      counters.forEach((item) => {
        item.innerText = "0"; //记录分数变化的变量,初始值为0
        const updateData = () => {
          const data = +item.getAttribute("data-set"); //获取到元素中绑定的数据
          const tmp = +item.innerText; //临时变量保存变化一次的数据量
          const changeData = data / 100; //设置改变的速率
          if (tmp < data) {
            //如果临时变量的值小于最终数据的值,那么就给元素进行数据相加
            item.innerText = `${Math.ceil(tmp + changeData)}`; //值数相加,然后进行取整
            setTimeout(updateData, 1); //定时器传入回调函数目的在于动态变化
          } else {
            item.innerText = data; //不满足条件后,证明得到了最终数据,直接渲染
          }
        };
        updateData(); //调用函数,启动函数
      });
    },
  },
};
</script>
<style lang="scss" scoped>
* {
  box-sizing: border-box;
}

.outer {
  background-color: #033f8b;
  color: #fff;
  font-family: "Roboto Mono", sans-serif;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 350px;
  overflow: hidden;
  margin: 0;
}

.counter-container {
  display: flex;
  flex-direction: column;
  justify-content: center;
  text-align: center;
  margin: 30px 50px;
}

.counter {
  font-size: 60px;
  margin-top: 10px;
}

@media (max-width: 580px) {
  .outer {
    flex-direction: column;
  }
}
</style>

目录
相关文章
|
19天前
|
开发框架 前端开发 JavaScript
在Vue&Element前端项目中,使用FastReport + pdf.js生成并展示自定义报表
在Vue&Element前端项目中,使用FastReport + pdf.js生成并展示自定义报表
|
3天前
|
JSON JavaScript 前端开发
JavaScript 详解——Vue基础
【8月更文挑战第16天】
12 3
JavaScript 详解——Vue基础
|
4天前
|
JavaScript 前端开发
解决在JS中阻止定时器“重复”开启问题、Vue中定时器的使用
这篇文章讨论了在JavaScript和Vue中如何避免定时器重复开启的问题,并提供了一个模拟场景和代码示例,演示了在开启新定时器前清除旧定时器的方法。
解决在JS中阻止定时器“重复”开启问题、Vue中定时器的使用
|
10天前
|
JavaScript
Vue进阶篇(二)-彻底改变 Vue.js 状态管理:深入探讨Vue 3 Setup中的DefineModel
Vue进阶篇(二)-彻底改变 Vue.js 状态管理:深入探讨Vue 3 Setup中的DefineModel
|
11天前
|
JavaScript 前端开发 API
【前端开发】JS同步与异步调用,Vue2基础知识
本文简要介绍了JavaScript中的同步与异步调用以及Vue2的基础知识。 ### JS同步与异步调用 - **同步调用**:代码按顺序执行,每个任务完成后才执行下一个。 - **异步调用**:允许代码并发执行,不必等待前一个任务完成。 - **回调函数**:传统异步模式,如`setTimeout`。 - **Promise**:解决回调地狱问题,链式调用 `.then()`。 - **async/await**:基于Promise,使异步代码看起来像同步代码。 ### Vue2基础知识 - **核心概念**:指令、实例、组件、模板、数据绑定和生命周期钩子。 - **指令**
36 5
|
19天前
|
开发框架 前端开发 JavaScript
在基于ABP框架的前端项目Vue&Element项目中采用日期格式处理,对比Moment.js和day.js的处理
在基于ABP框架的前端项目Vue&Element项目中采用日期格式处理,对比Moment.js和day.js的处理
|
4天前
|
JavaScript 前端开发 API
vue中将验证表单输入框的方法写在一个js文件中(表达式验证邮箱、身份证、号码、两次输入的密码是否一致)
这篇文章介绍了如何在Vue框架中将表单输入验证逻辑封装到一个JavaScript文件中,并通过正则表达式验证邮箱、身份证、手机号等信息,同时确保两次密码输入的一致性。
|
6天前
|
JavaScript
VUE——使用easy-typer-js实现打字机效果
VUE——使用easy-typer-js实现打字机效果
12 0
|
6天前
|
JavaScript 前端开发
使用js,html,css实现歌词滚动的效果
使用js,html,css实现歌词滚动的效果
15 0
|
7天前
|
JavaScript
Vue——使用JS文件中的函数ESLint报错未定义
Vue——使用JS文件中的函数ESLint报错未定义
17 0