活动倒计时-天时分秒(兼容ios,定时器的使用以及其注意事项)

倒计时代码(兼容ios)

beforeDestroy(){  //页面销毁前清除定时器
    clearInterval(this.countTimes)
}
methods:{
    timer(){
        let u = navigator.userAgent;
        if(!!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)){  //ios端
            let iosPreTime=this.predate.split(/[- :]/)  //ios端与安卓端时间格式不同,需做兼容处理
            let preTime = new Date(iosPreTime[0],iosPreTime[1]-1,iosPreTime[2],iosPreTime[3],iosPreTime[4],iosPreTime[5]).getTime()
            this.countTimes=setInterval(()=>{
                let nowTime = new Date().getTime();
                let obj = null;
                if(preTime - nowTime > 0){
                    let time = (preTime - nowTime) / 1000;
                    let day = parseInt(time / (60 * 60 * 24));
                    let hou = parseInt(time % (60 * 60 * 24) / 3600);
                    let min = parseInt(time % (60 * 60 * 24) % 3600 / 60);
                    let sec = parseInt(time % (60 * 60 * 24) % 3600 % 60);
                    obj = {
                        day: day<10?'0'+day:day,
                        hou: hou<10?'0'+hou:hou,
                        min: min<10?'0'+min:min,
                        sec: sec<10?'0'+sec:sec
                    };
                    this.timing = obj.day + '天' + obj.hou + '时' + obj.min + '分' + obj.sec + '秒';
                } else {
                    obj = {day:'00',hou:'00',min:'00',sec:'00'};
                    clearInterval(this.countTimes)
                }
            },1000)
        }else{   //非ios端 --- 安卓端,pc端
            let preTime = new Date(this.predate).getTime()   //注意后端接口返回的predate格式应为 2020-02-02 20:20:20
            this.countTimes=setInterval(()=>{
                let nowTime = new Date().getTime();
                let obj = null;
                if(preTime - nowTime > 0){
                    let time = (preTime - nowTime) / 1000;
                    let day = parseInt(time / (60 * 60 * 24));
                    let hou = parseInt(time % (60 * 60 * 24) / 3600);
                    let min = parseInt(time % (60 * 60 * 24) % 3600 / 60);
                    let sec = parseInt(time % (60 * 60 * 24) % 3600 % 60);
                    obj = {
                        day: day<10?'0'+day:day,
                        hou: hou<10?'0'+hou:hou,
                        min: min<10?'0'+min:min,
                        sec: sec<10?'0'+sec:sec
                    };
                    this.timing= obj.day + '天' + obj.hou + '时' + obj.min + '分' + obj.sec + '秒';
                } else {
                    obj = {day:'00',hou:'00',min:'00',sec:'00'};
                    clearInterval(this.countTimes)
                }
            },1000)
        }
    },
}

一般页面的定时器的使用及清除

setInterval定时器:请保证在页面销毁前清除该定时器,如在beforeDestroy生命周期里清除定时器

setTimeout定时器:该定时器只使用一次,为避免占用内存,请使用后即清除
如let times=setTimeout(()=>{
    console.log("定时器触发了")
    clearTimeout(times)  //执行完相关语句后即可清除定时器
})

使用了keepAlive的页面的定时器的使用及清除

因为keepAlive的机制,再次进入缓存页面,生命周期会发生改变(见https://www.cnblogs.com/huihuihero/p/11905439.html),created及mounted生命周期将不再执行。数据不会更新。
若定时器触发放在了created或mounted生命周期里。则再次进入keepAlive页面,因created及mounted生命周期不再执行,定时器也将不再执行。

若想在每次进入keepAlive的页面依旧触发定时器,以及离开此页面清除定时器。则:
定时器触发放在activated生命周期里,定时器清除放在deactivated生命周期里即可。
如
activated(){
    this.times=setInterval(()=>{
        console.log("定时器触发了")
    })
}
deactivated(){
    clearInterval(this.times)
}

原文地址:https://www.cnblogs.com/huihuihero/p/12195643.html

时间: 2024-10-18 19:42:01

活动倒计时-天时分秒(兼容ios,定时器的使用以及其注意事项)的相关文章

JS倒计时——天时分秒

HTML代码: <div id="times_wrap" class="time_num"> 距离结束时间: <div class="time_w"> <b id="times_d" class="time"> </b>天 <b id="times_h" class="time"> </b>时 &

js倒计时天时分秒[转]

<script language="JavaScript"> <!-- // function getQueryString(name) { var reg =new RegExp("(^|&)"+ name +"=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r !=null

活动倒计时案例

<!DOCTYPE html><html><head>    <meta charset="utf-8">    <title>活动倒计时代码</title></head> <body> <script type="text/javascript" src="http://libs.useso.com/js/jquery/1.11.1/jquery.min

兼容iOS 10 资料整理笔记-b

原文链接:http://www.jianshu.com/p/0cc7aad638d9 1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserNotifications的易用,功能也变得非常强大. iOS 9 以前的通知 1.在调用方法时,有些方法让人很难区分,容易写错方法,这让开发者有时候很苦恼. 2.应用在运行时和非运行时捕获通知的路径还不一致. 3.

兼容iOS 10 资料整理笔记

1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserNotifications的易用,功能也变得非常强大. iOS 9 以前的通知 1.在调用方法时,有些方法让人很难区分,容易写错方法,这让开发者有时候很苦恼. 2.应用在运行时和非运行时捕获通知的路径还不一致. 3.应用在前台时,是无法直接显示远程通知,还需要进一步处理. 4.已经发出的通知是不能更新

利用React Native 从0到1 开发一款兼容IOS和android的APP(仿造京东)

最近有一部电视剧叫做<微微一笑很傻逼>里面有个男猪脚,人们都叫他大神~我觉得吧~大神是相对的~所以~啥事都得谦虚! 好了 今天介绍的是如何从0到1利用React Native开发一款兼容IOS和android的仿造京东的APP,是不是很激动?我保证我说的很通俗易懂,当然,大神请滚蛋,这个不适合你看 ok!扯犊子结束,下面开始! 第一步:打开你的手机JD客户端--我们来分析一下 看到了不~在上面的图就是JD客户端的分析图(ok,我承认这图是盗的),从上面的图我们可知道JDAPP的一个页面的主要结

【转】兼容iOS 10 资料整理

1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserNotifications的易用,功能也变得非常强大. iOS 9 以前的通知 1.在调用方法时,有些方法让人很难区分,容易写错方法,这让开发者有时候很苦恼. 2.应用在运行时和非运行时捕获通知的路径还不一致. 3.应用在前台时,是无法直接显示远程通知,还需要进一步处理. 4.已经发出的通知是不能更新

兼容iOS 10 资料整理

1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserNotifications的易用,功能也变得非常强大. iOS 9 以前的通知 1.在调用方法时,有些方法让人很难区分,容易写错方法,这让开发者有时候很苦恼. 2.应用在运行时和非运行时捕获通知的路径还不一致. 3.应用在前台时,是无法直接显示远程通知,还需要进一步处理. 4.已经发出的通知是不能更新

背景音乐的自动播放(兼容 ios 和 android)

ios 为了节省用户流量,对于 audio 和 video标签的 preload 和 autopaly 标签 会自动拦截, 除非用户手动点击 交互才会执行 . 但是对于背景音乐,又必须加载的时候就要执行,怎么办,直接调用js 来自动触发. <audio id="bgaudio" src="./media/bg-music.mp3" loop="loop"></audio> <script type="tex