在这次大屏项目开发中用到了数字滚动,百度找了插件,感觉不怎么好用,最后找到下边代码,忘记了是哪位博主写的了,如果看到请见谅哦!!!
直接上代码吧!
在components中穿件一个文件夹用来放代码:
//成功案例:
//NumberScroll.vue
/*
数字滚动特效组件 NumberScroll
*/
<template>
<span class="number-scroll-grow">
<span
ref="numberScroll"
:data-time="time"
class="number-scroll"
:data-value="value">
0
</span>
</span>
</template>
<script>
import { defineComponent } from "vue";
export default defineComponent({
name: "numberScroll",
props: {
time: {
type: Number,
default: 2,
},
value: {
type: Number,
default: 0,
},
thousandSign: {
type: Boolean,
default: () => false,
},
},
data() {
return {
oldValue: 0,
};
},
watch: {
value: function () {
this.numberScroll(this.$refs.numberScroll);
},
},
methods: {
numberScroll(ele) {
let _this = this;
let value = _this.value - _this.oldValue;
let step = (value * 100) / (_this.time * 100);
let current = 0;
let start = _this.oldValue;
let t = setInterval(function () {
start += step;
if (start > _this.value) {
clearInterval(t);
start = _this.value;
t = null;
}
if (current === start) {
return;
}
current = parseInt(start);
_this.oldValue = current;
if (_this.thousandSign) {
ele.innerHTML = current
.toString()
.replace(/(\d)(?=(?:\d{3}[+]?)+$)/g, "$1,");
} else {
ele.innerHTML = current.toString();
}
}, 120);
},
},
mounted() {
this.$nextTick(() => {
this.numberScroll(this.$refs.numberScroll);
});
},
});
</script>
<style lang="scss" scoped>
.number-scroll-grow {
transform: translateZ(0);
}
</style>
页面中引入:
import NumberGundong from "@/components/NumberGundong/index.vue“
<span class="num">
<NumberGundong :value="soilNum" :time="1" />
</span>
配置:
value:配置插入的数字必传
time:滚动时间