用vue写一个组件,要求每隔5秒刷新一些,展示“自动站:35个”,其中数字要求加上动效,自动从0增加至待展示的数值
时间: 2024-03-18 20:40:44 浏览: 49
好的,我可以帮您写一个Vue组件,满足您的需求。以下是代码实现:
```
<template>
<div>
自动站:<span ref="number">{{ count }}</span>个
</div>
</template>
<script>
export default {
data() {
return {
count: 0,
};
},
mounted() {
setInterval(() => {
this.count += 1;
this.animateNumber(this.refs.number, this.count - 1, this.count, 1000); // 动效设置
}, 5000);
},
methods: {
animateNumber(ref, start, end, duration) {
let startTimestamp = null;
const step = (timestamp) => {
if (!startTimestamp) startTimestamp = timestamp;
const progress = Math.min((timestamp - startTimestamp) / duration, 1);
ref.innerHTML = Math.floor(progress * (end - start) + start); // 数字动效设置
if (progress < 1) {
window.requestAnimationFrame(step);
}
};
window.requestAnimationFrame(step);
},
},
};
</script>
```
解释一下代码:
首先,我们在template中定义了一个div,包含了“自动站:35个”这个文本,其中数字部分用`<span ref="number">{{ count }}</span>`包裹,`ref`属性用于在mounted函数中获取这个`span`元素。
在script中,我们首先定义了一个data对象,包含了组件内需要用到的数据,这里只有一个count变量,用于保存当前数字。
mounted函数中,我们使用了`setInterval`函数,每隔5秒执行一次回调函数。回调函数中,我们将count加1,然后调用`animateNumber`方法,实现数字动效。
`animateNumber`方法用于实现数字动效。它接收三个参数:`ref`表示需要进行动效的元素,这里是我们上面定义的`<span>`元素;`start`表示动效开始的数字;`end`表示动效结束的数字;`duration`表示动效持续的时间。在方法内部,我们使用`window.requestAnimationFrame`函数实现了数字动效,具体实现方式是通过计算当前数字在整个动效中所占比例来更新`<span>`元素的内容。当动效结束时,停止递归调用。
最后,我们将整个Vue组件导出,这样就可以在其他Vue组件中使用了。
阅读全文