最近公司需要做一个数字滚动效果插件,于是我想到使用vue-count-to,但是在使用的过程中发现当页面刷新后,起始值startVal,要比刷新前的值要小。我想要的效果是:刷新后的值应该保持刷新前的值然后继续滚动。具体过程是这样的:
后端传初始值和最终值,滚动时间是按24小时计算,用户任何时候打开都是保持多个页面滚动的数字一致。
现在是我是计算差值在24小时中每秒滚动的速率,然后以此来计算countTo的初始值,但是当页面刷新后,滚动的初始值就会变小,所以我怀疑是vue-count-to滚动的速率不是按平均速率来计算的,那么怎么保持页面刷新后的值与刷新之前的值保持不变呢?当我将缓和功能useEasing设置成false时,数字不滚动,请问怎么回事?
以下是我的代码:
<countTo :separator='separator' :decimals='decimals' :startVal='startVal' :endVal='endVal' :duration='durationTime'></countTo>
import countTo from 'vue-count-to'
data(){
return{
startDatas: 0,
// 滚动数据
separator: '',
startVal: 10,
endVal: 20,
decimals: 2,
durationTime: 5000,
}
}
// 滚动效果数值计算
getTimeDatas(start, end) {
console.log(start, end, 2610)
// 计算差值
var res = Number(end - start)
// 转化成毫秒
var curTime = Number(this.configData.cur_time) * 1000
// 计算秒的配速
var speeds = res / 86400
// 转化成时分秒
var time = (this.$dateFmt(curTime, 'HH:mm:ss'))
// 计算之前跑了多少值,初始值
this.startVal = this.timeToSec(time) * speeds + start
this.endVal = end
console.log(this.startVal, this.endVal, 355)
// 计算还剩多少时间
this.durationTime = (86400 - this.timeToSec(time)) * 1000
},
// 时间转为秒
timeToSec(time) {
console.log(time, 333)
var hour = time.split(':')[0]
var min = time.split(':')[1]
var sec = time.split(':')[2]
var s = Number(hour * 3600) + Number(min * 60) + Number(sec)
return s
}
缓存一下值就行了,可以使用计算属性计算值。