android 屏幕关闭 暂停,当屏幕超时时,setInterval在Android Browser / Mobile Safari中暂停...

本文介绍了一个使用JavaScript实现的计时器功能,该计时器能够在浏览器标签页失去焦点时暂停倒计时,并在重新获得焦点时继续计时。通过监听页面的可见性状态变化来实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

private timerInfo:{

days?:number,

hours?:number,

minutes:number,

seconds:number

};

private startTime:Moment = moment();

private timerDuration:number = 20; // in minutes

private timerHandle:any;

ngOnInit() {

this.setVisibilityListener();

}

private setVisibilityListener():void {

var self = this;

var hidden, visibilityState, visibilityChange;

if (typeof document.hidden !== "undefined") {

hidden = "hidden";

visibilityChange = "visibilitychange";

visibilityState = "visibilityState";

}

var document_hidden = document[hidden];

document.addEventListener(visibilityChange, function () {

if (document_hidden != document[hidden]) {

if (document[hidden]) {

// Document hidden

console.log("document hidden");

} else {

// Document shown

console.log("document shown; setCountDownTimer()");

self.setCountDownTimer();

}

document_hidden = document[hidden];

}

});

}

private setCountDownTimer():void {

var self = this;

if (self.startTime) {

var startMoment = moment(self.startTime);

var endMoment = startMoment.add(self.timerDuration, "minutes");

console.log("endMoment: ", endMoment.toISOString());

self.clearTimer();

var eventTime = endMoment.unix();

var currentTime = moment().unix();

var diffTime = eventTime - currentTime;

var duration = moment.duration(diffTime * 1000, 'milliseconds');

var interval = 1000;

// if time to countdown

if (diffTime > 0) {

self.timerHandle = setInterval(() => {

self.zone.run(() => {

var diff = duration.asMilliseconds() - interval;

if (diff < 0) {

self.clearTimer();

self.timerComplete();

} else {

duration = moment.duration(duration.asMilliseconds() - interval, 'milliseconds');

self.timerInfo = {

days: moment.duration(duration).days(),

hours: moment.duration(duration).hours(),

minutes: moment.duration(duration).minutes(),

seconds: moment.duration(duration).seconds()

};

// console.log("timerInfo: ", JSON.stringify(self.timerInfo));

}

});

}, 1000);

} else {

self.timerComplete();

}

}

}

private clearTimer():void {

if (this.timerHandle) {

clearInterval(this.timerHandle);

this.timerHandle = null;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值