DDR爱好者之家 Design By 杰米
简介:
倒计时秒杀组件在电商网站中层出不穷 不过思路万变不离其踪,我自己根据其他资料设计了一个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>
以上所述是小编给大家介绍的vue设计一个倒计时秒杀的组件详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
更新日志
2024年11月25日
2024年11月25日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]