蝙蝠岛资源网 Design By www.hbtsch.com
下面先给大家介绍下vue 设计一个倒计时秒杀的组件 ,具体内容如下所述:
简介:
倒计时秒杀组件在电商网站中层出不穷 不过思路万变不离其踪,我自己根据其他资料设计了一个vue版的
核心思路:1、时间不能是本地客户端的时间 必须是服务器的时间这里用一个settimeout代替 以为时间必须统一
2、开始时间,结束时间通过父组件传入,当服务器时间在这个开始时间和结束时间的范围内 参加活动按钮可以点击,并且参加过活动以后不能再参加,
3、在组件创建的时候 同步得到现在时间服务时间差,并且在这里边设置定时器,每秒都做判断看秒杀是否开始和结束,
4、在更新时间的函数中是否开始和结束,
5、在computed钩子中监听disable 确定按钮是否可点击
6、参加过活动在updated中停止定时器的计时,页面销毁的时候也停止计时
下边是代码
子组件
<template>
<div>
<button @click="handleClick" :disabled="disabled">
{{btnText}}
</button>
<span>{{tip}}</span>
</div>
</template>
<script>
import moment from 'moment'
export default {
name: "Spike",
props: {
startTime: {
required: true,
validator: (val) => {
return moment.isMoment(val)
}
},
endTime: {
required: true,
validator: (val) => {
return moment.isMoment(val)
}
}
},
data() {
return {
start: false,
end: false,
done: false,
tip: '',
timeGap: 0,
btnText:""
}
},
computed: {
disabled() {
//当三个异号的时候disable返回真,不可点击,
// 初始化通过this.updateState确定disable的状态
return !(this.start && !this.end && !this.done);
}
},
async created() {
const serverTime=await this.getServerTime();
this.timeGap=Date.now()-serverTime;//当前时间和服务器时间差
this.updateState();
this.timeInterval=setInterval(()=>{
this.updateState()
},1000)
},
updated(){
if(this.end||this.done){
clearInterval(this.timeInterval)
}
},
methods: {
handleClick() {
alert("提交成功");
this.done=true;
this.btnText="已参加过活动"
},
getServerTime() {
//模拟服务器时间
return new Promise((resolve, reject) => {
setTimeout(() => {
//当前时间慢10秒就是服务器时间
resolve(new Date(Date.now() -10 * 1000).getTime())//跟本地时间差
}, 0)
})
},
updateState() {
const now = moment(new Date(Date.now() - this.timeGap));//当前服务器时间
const diffStart=this.startTime.diff(now);//开始时间和服务器时间之差
const diffEnd=this.endTime.diff(now);//结束时间和服务器时间之差
if(diffStart<0){
this.start=true;
this.tip="秒杀已开始";
this.btnText="参加"
}else{
this.tip=`距离秒杀开始还剩${Math.ceil(diffStart/1000)}秒`;
this.btnText="活动未开始";
}
if(diffEnd<=0){
this.end=true;
if( !this.btnText==="已参加过活动"||this.btnText==="参加"){
this.tip="秒杀已结束";
this.btnText="活动已结束";
}
}
}
},
beforeDestroy() {
clearInterval(this.timeInterval)
}
}
</script>
<style scoped>
button[disabled]{
cursor: not-allowed;
}
</style>
父组件
<template>
<div>
<h1 style="color: red">设计一个秒杀倒计时的组件</h1>
<Spike :startTime="startTime" :endTime="endTime"></Spike>
</div>
</template>
<script>
import Spike from './Spike'
import moment from 'moment'
export default {
name: "index",
components:{
Spike
},
data(){
return{
endTime:moment(new Date(Date.now()+10*1000)),
startTime:moment(new Date(Date.now()))
}
}
}
</script>
<style scoped>
</style>
用到moment的这个关于时间操作的库
下面紧接着给大家介绍小程序或者vue商品秒杀倒计时
最近做小程序商城。列表秒杀倒计时这个坑死了。还是借鉴网上大佬的方法
let goodsList = [{
actEndTime: '2018-06-24 10:00:43'
}]
let endTimeList = [];
// 将活动的结束时间参数提成一个单独的数组,方便操作
this.data.mydata.rush.forEach(o => {
endTimeList.push(o.actEndTime)
})
this.setData({
actEndTimeList: endTimeList
});
// 执行倒计时函数
this.countDown();
timeFormat(param) { //小于10的格式化函数
return param < 10 "tui-countdown-content {{(countDownList[index].day && countDownList[index].hou && countDownList[index].min && countDownList[index].sec) == 0">
<text>剩余</text>
<text class='tui-conutdown-box'>{{countDownList[index].day}}</text>
<text>天</text>
<text class='tui-conutdown-box'>{{countDownList[index].hou}}:</text>
<text class='tui-conutdown-box'>{{countDownList[index].min}}:</text>
<text class='tui-conutdown-box'>{{countDownList[index].sec}}</text>
</view>
</view>
countDownList: []
主要是将获取到的时间循环出来单独存一个数组。然后再倒计时。获取的时间和计算机的时间对比。
然后再每个商品的index下便可获取到每个倒计时了
总结
以上所述是小编给大家介绍的vue 实现倒计时秒杀的组件,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
蝙蝠岛资源网 Design By www.hbtsch.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
蝙蝠岛资源网 Design By www.hbtsch.com
暂无vue 实现小程序或商品秒杀倒计时的评论...
更新日志
2025年10月24日
2025年10月24日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]