我尝试用javascript和jquery,但不知道如何做到这一点。我不想让计时器再次开始刷新计数。这与拍卖一样,当他倒数3,2,刷新后他不会再次开始,它应该继续倒数上一次结束的地方。对于其他的产物必须从3开始计数。有什么主意吗?
编辑:因为一些用户误解了我在搜索什么。
我的问题是,我不知道如何节省时间,当有人刷新页面继续倒计时。如果有人在21秒刷新网站,他或她有30秒的时间做出选择。刷新站点后,计数器将在21秒后计数,而不会在30秒后再次启动。没有ajax .
尽可能硬编码。如果不可能,那么cookie的变体
您可以在加载页面时为窗口设置名称。在设置名称之前,请检查此窗口是否已经有名称。
如果没有名称,则为窗口设置一个名称,并从0开始计数,并在每次计数增加时将计数值保存在cookie中。
如果它有一个名称(这意味着页面被重新加载),从cookie中读取计数值并做增量并保存到cookie中。
EDIT:示例,在body load上调用initCount()函数。使用decrementAndSave函数减少计数的值并将其保存到cookie中。
var count = 3;// 3 -> 2 -> 1
function getCookie(c_name) {
var i, x, y, ARRcookies = document.cookie.split(";");
for (i = 0; i < ARRcookies.length; i++) {
x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
x = x.replace(/^s+|s+$/g, "");
if (x == c_name) {
return unescape(y);
}
}
}
function setCookie(c_name, value, exdays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString());
document.cookie = c_name + "=" + c_value;
}
function initCount() {
if (window.name) {
count = getCookie("count_" + window.name);// to keep separate count cookies for each window
} else {
window.name = "w_" + (new Date().getTime());
count = 3;
setCookie("count_" + window.name, count, null);
}
}
function decrementAndSave() {
count--;
// separate cookie for each window or tab
setCookie("count_" + window.name, count, null);
}
这不是完美的,但我设计这个脚本做一个30分钟的倒计时,然后在最后几秒钟改变一些文本。唯一的问题是,当它到达1:00时,它开始于30:60,我还没有想出如何解决这个问题。这也许不能完美地满足你的需求,但它可能会让你走上正确的道路。
<script>
//add leading zeros
setInterval(function() {
function addZero(i) {
if (i < 10) {
i = "0" + i;
}
return i;
}
var x = document.getElementById("timer");
var d = new Date();
var s = (d.getSeconds());
var m = (d.getMinutes());
var a = addZero(30 - m);
var b = addZero(60 - m);
var c = (60 - s);
var z = "<span style='color:red;font-size:50px;'>" + "Break" + "</span>";
var v = "<span style='color:black;font-size:24px;'>" + "Break" + "</span>";
//Decide how much should be subtracted from the time
if (m > 30) {
y = b;
}
else if (m < 30) {
y = a;
}
//elements for changing text
if (y < 2 && c < 15) {
q = z;
}
else {
q = v;
}
var t = y + (":" + addZero(c) + " Till Station " + (q));
x.innerHTML = t;
}, 250);
</script>
<div align="center" id="timer" style='color:black;font-size:24px;' ></div>
如果您有一个倒计时,那么您必须定义某种结束时间。所以,与其设置一个倒计时,每秒钟减去1,不如这样做:
var endTime = new Date(2011,11,13,0,0,0); // Midnight of December 13th 2011
var timer = setInterval(function() {
var now = new Date();
var timeleft = Math.max(0,Math.floor((endTime.getTime()-now.getTime())/1000));
var d, h, m, s;
s = timeleft % 60;
timeleft = Math.floor(timeleft/60);
m = timeleft % 60;
timeleft = Math.floor(timeleft/60);
h = timeleft % 24;
timeleft = Math.floor(timeleft/24);
d = timeleft;
document.getElementById('counter').innerHTML = "Time left: "+d+" days, "+h+" hours, "+m+" minutes, "+s+" seconds.";
if( timeleft == 0) clearInterval(timer);
},1000);
var interval = 90000; //90 secounds
function reset() {
localStorage.endTime = +new Date() + interval;
}
if (!localStorage.endTime) {
reset();
}
function millisToMinutesAndSeconds(millis) {
var minutes = Math.floor(millis / 60000);
var seconds = ((millis % 60000) / 1000).toFixed(0);
return minutes + ":" + (seconds < 10 ? "0" : "") + seconds;
}
setInterval(function () {
var remaining = localStorage.endTime - new Date();
if (remaining >= 0) {
document.getElementById("tooltip").innerText =
millisToMinutesAndSeconds(remaining);
} else {
reset();
}
}, 100);