我希望在我的PHP页面上有一个特定按钮的倒计时,我正在使用基于javascript的以下代码 但是,它会重置页面重新加载时的目标值,所以如何在没有重置目标值的情况下使用相同的值。我可以用session做什么吗?
<html>
<body>
<p>Time remaining: <span id="countdownTimer"><span>00:00.<small>00</small></span></p>
<script type="text/javascript">
if (document.getElementById('countdownTimer')) {
pad = function(n, len) { // leading 0's
var s = n.toString();
return (new Array( (len - s.length + 1) ).join('0')) + s;
};
function countDown() {
var now = new Date();
if ( (now.getDay() >= 0) && (now.getDay() <= 6) ) { // Monday to Friday only
var target = 23; // 15:00hrs is the cut-off point
if (now.getHours() < target) { // don't do anything if we're past the cut-off point
var hrs = (target - 1) - now.getHours();
if (hrs < 0) hrs = 0;
var mins = 59 - now.getMinutes();
if (mins < 0) mins = 0;
var secs = 59 - now.getSeconds();
if (secs < 0) secs = 0;
var str = pad(hrs, 2) + ':' + pad(mins, 2) + '.<small>' + pad(secs, 2) + '</small>';
document.getElementById('countdownTimer').innerHTML = str;
}
}
}
var timerRunning = setInterval('countDown()', 1000);
}
</script>
</body>
</html>
答案 0 :(得分:1)
而不是像现在这样评估你的变量:
var now = new Date();
像这样评估它(假设我们的浏览器支持LocalStorage):
if (!localStorage.myDate)
localStorage.myDate = (new Date()).toString();
var now = new Date(localStorage.myDate);
这样,我们只评估首次加载时的当前日期。之后,我们引用该日期的序列化字符串版本,并在创建“now”变量时将其作为参数传递。
如果我们想支持旧浏览器( cough IE),我们可以使用userData或只是做一些非常类似于cookies的事情。
答案 1 :(得分:0)
基本上,你想要捕获'现在'一次,而不是没有那个改变,对吗?
function getNow(){ //call this rather than use var now = new Date();
if (window.localStorage){
if (!localStorage.now){
localStorage.now = new Date();
}
return localStorage.now;
}else{
return new Date();
}
}
请原谅我是否有一些语法(我不确定你是否必须转换日期以将其存储在localStorage中),但这就是它的要点。对于IE7及以下支持,您需要使用cookie,但概念保持不变。
另外,我认为你错了:
if ( (now.getDay() >= 0) && (now.getDay() <= 6) )
总是如此,请尝试:
if ( (now.getDay() > 0) && (now.getDay() < 6) )