显示确认弹出窗口时,Javascript计时器暂停
我正在尝试创建一个带有预订时间的购物车。剩余时间由php计算。当用户进入请求的页面时,执行的时间是秒的整数,它来自php会话。如果还有3分钟,javascript会启动一个确认框,询问用户是否要重置计时器以继续使用购物车 当显示确认框时,计时器的执行会暂停。如何更改代码,使计时器在不通过确认框暂停的情况下运行显示确认弹出窗口时,Javascript计时器暂停,javascript,timer,Javascript,Timer,我正在尝试创建一个带有预订时间的购物车。剩余时间由php计算。当用户进入请求的页面时,执行的时间是秒的整数,它来自php会话。如果还有3分钟,javascript会启动一个确认框,询问用户是否要重置计时器以继续使用购物车 当显示确认框时,计时器的执行会暂停。如何更改代码,使计时器在不通过确认框暂停的情况下运行 //Starting the Counter in the document.ready-block //remainingSeconds($_SESSION['timer']) is t
//Starting the Counter in the document.ready-block
//remainingSeconds($_SESSION['timer']) is the time left in seconds (as int)
CountDownTimer('<?php echo remainingSeconds($_SESSION['timer']); ?>', 'reservedTime');
这里是倒计时功能:
// These functions are located in an external .js-file
// Found it on StackOverflow and edited it for my needs
function CountDownTimer(dt, id)
{
if(id == "kill") {
clearInterval(timer);
} else {
var _second = 1,
_minute = _second * 60,
_hour = _minute * 60;
function showRemaining() {
var time = dt--,
minutes,
seconds;
if (dt == 180) {
var extend = confirm("Reset the timer?");
if (extend) {
resetCounter();
}
}
if (dt < 0) {
clearInterval(timer);
document.getElementById(id).innerHTML = '00:00';
alert("No time left.");
//--redirect for readability removed--
return;
}
if(time > 59) {
minutes = Math.floor((time % _hour) / _minute);
seconds = Math.floor((time % _minute) / _second);
} else {
minutes = "0";
seconds = time;
}
if(minutes < 10) {minutes = "0"+minutes}
if(seconds < 10) {seconds = "0"+seconds}
document.getElementById(id).innerHTML = minutes + ":" + seconds;
}
timer = setInterval(showRemaining, 1000);
}
}
function resetCounter() {
request = $.ajax({url: "php/ajax.php?f=3"});
request.done(function (response, textStatus, jqXHR){
try {
var data = $.parseJSON(response);
CountDownTimer('0', 'kill'); // reset old counter
CountDownTimer(data.time, 'reservedTime'); // start new one
} catch(e) {
alert("ERROR ERMAGERD");
return false;
}
});
request.fail(function (jqXHR, textStatus, errorThrown){
alert("ERROR");
});
}
当计时器暂停时,它将创建一个与会话中不同的时间。因此,购物车可能会过期,但用户不会注意到它,并且可能会丢失其保留的项目
编辑:或者有没有更好的/安全的方法将购物车计时器与输出集成到用户,这样就不会有时差?我认为这是不可能的,因为JavaScript的单线程特性。i、 e当您的警报/确认框被执行时,其他一切都将停止运行,包括您的计时器功能。最好的方法是实现自定义警报/确认框,它通常基于弹出的div/box,这是一个很好的观点。制作了自定义警报-/confirm-div。谢谢!