语法可以直接在官网查看
需求
后端返回的数据格式如下
[{"id": 1,"btn_text": "+1","second": 0},{"id": 2,"btn_text": "+1","second": 0}...
]
之前约定second最多30s, 因此只需要使用秒不需要使用分钟或者是小时。
在此处使用van-count-down
组件来完成的。
<li v-for='item in getCountList' ><template v-if="item.second && !item.secondFinish"><van-count-down :time="item.second*1000" @finish="item.secondFinish = true"><template #default="timeData"><span class="block">{{ timeData.seconds }}S</span></template></van-count-down></template><template v-else>{{ item.btn_text }}</template>
</li>
问题
测试时发现 倒计时25S、24S … 0S 之后并没有显示按钮文本“+1”而是显示60S继续开始倒计时
25S、24S … 0S、60S、59S、58S … 0S、60S …
原因
后端返回的second数值为 325(不符合约定数值)
- 我以为的:
- [1] 会换算成时分秒 325s为30min25s
- [2] timeData.seconds获取秒数为25
- [3] 25S进行倒计时,倒计时结束触发finish方法
- 实际上
- [1] 将所有数据换算成秒以60s为一组 如[25s, 60s, 60s…, 60s]
- [2] 进行倒计时,将
所有组
倒计时结束才会走finish方法!
示例: 先对25s进行倒计时,然后对60s进行倒计时 …所有60s倒计时结束,触发finish。
解决
只需要后端返回正确的秒数即可(<=30)。