3

PHPページの特定のボタンに関連付けられたカウントダウンが必要で、javascriptに基づいた次のコードを使用していますが、ページのリロード時にターゲット値をリセットするため、ターゲット値をリセットせずに同じ値を保持する方法セッションで何かをしますか??

    <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>
4

2 に答える 2

1

変数「今」をそのように評価する代わりに:

var now = new Date();

次のように評価します (ブラウザーが LocalStorage をサポートしていると仮定します)。

if (!localStorage.myDate)
    localStorage.myDate = (new Date()).toString();
var now = new Date(localStorage.myDate);

このようにして、最初のロード時に現在の日付のみを評価します。その後、その日付のシリアル化された文字列バージョンを参照し、「now」変数を作成するときにそれを引数として渡します。

古いブラウザー (咳IE)をサポートしたい場合は、userData を使用するか、Cookie で非常によく似た処理を行うことができます。

于 2013-03-12T01:13:48.250 に答える
0

つまり、基本的には、「今」を 1 回キャプチャするだけで、その変化はありませんよね?

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) )
于 2013-03-11T23:31:19.610 に答える