加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

react 倒计时 countDown

发布时间:2020-12-15 20:21:01 所属栏目:百科 来源:网络整理
导读:因为项目需要做一个react倒计时组件,网络上也有,但是感觉不是很好,兼容性不高,于是自己写了一个: 1.包含 天,时,分,秒。可以根据特定的场景选择相应的展示方式; 2.提供回调函数。 1 import React from ‘react‘ 2 3 export class CountDown extends
 
 

因为项目需要做一个react倒计时组件,网络上也有,但是感觉不是很好,兼容性不高,于是自己写了一个:

 
 

1.包含 天,时,分,秒。可以根据特定的场景选择相应的展示方式;

 
 

2.提供回调函数。


1
import React from ‘react‘ 2 3 export class CountDown extends React.Component { 4 constructor(props) { 5 super(props); 6 this.state = { 7 day: 0, 8 hour: 0, 9 minute: ‘00‘,10 second: ‘00‘ 11 } 12 } 13 componentDidMount() { 14 if(this.props.endTime){ 15 let endTime = this.props.endTime.replace(/-/g,"/"); 16 this.countFun(endTime); 17 } 18 } 19 //组件卸载时,取消倒计时 20 componentWillUnmount(){ 21 clearInterval(this.timer); 22 } 23 24 countFun = (time) => { 25 let end_time = new Date(time).getTime(),26 sys_second = (end_time - new Date().getTime()); 27 this.timer = setInterval(() => { 28 //防止倒计时出现负数 29 if (sys_second > 1000) { 30 sys_second -= 1000; 31 let day = Math.floor((sys_second / 1000 / 3600) / 24); 32 let hour = Math.floor((sys_second / 1000 / 3600) % 24); 33 let minute = Math.floor((sys_second / 1000 / 60) % 60); 34 let second = Math.floor(sys_second / 1000 % 60); 35 this.setState({ 36 day:day,37 hour:hour < 10 ? "0" + hour : hour,38 minute:minute < 10 ? "0" + minute : minute,39 second:second < 10 ? "0" + second : second 40 }) 41 } else { 42 clearInterval(this.timer); 43 //倒计时结束时,触发父组件的方法 44 if(this.props.timeOver){ 45 this.props.timeOver() 46 } 47 48 } 49 },1000); 50 } 51 render() { 52 return ( 53 <span> {this.props.type == ‘day‘ ?<span>{this.state.day}天{this.state.hour}:</span> :""}{this.props.type == ‘hour‘ ? <span>{this.state.hour}:</span>:""}{this.state.minute}:{this.state.second}</span> 54 ) 55 } 56 }


父组件:

  <CountDown endTime="2018/11/10 17:10:00" type=‘day‘ timeOver={()=>this.timeOver()}/>
?
type 可以传‘day‘和‘hour‘,也不传,默认是展示 分 秒
?
回调函数也可传可不传,默认不传,可根据实际情况而定。
?
效果图:
?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读