PHP バージョンは関係ないと思いますが 5.2.17 で smarty を使用しています。
以下のコードはネットに散らばっている参考コードを寄せ集めて作ってみました。
カウントダウンで表示を変えているのですが、本来はタイムアウトしたら http://ほげ.com?aid={$aid}&xid={$xid} にリダイレクトしたいのです。
どのように書けばいいのかいろいろ調べてみますが皆目見当がつきません。
また jquery.countdown.js という外部ファイルに PHP から引数を渡したいのですが可能ですか?
例えば、 m = getFinishTime(parseInt(21)); の (21) を PHP 側でコントロールしたいのです。
また、リダイレクトURLも jquery.countdown.js に書くとするならば、これもパラメーターの渡し方がわかりません><
JavaScript は全然といっていいほど経験がないのでチンプンカンプンな質問かもしれませんが、どなたかよろしくお願いしますm(_ _)m
こんな感じになると思います。
index.php (抜粋)
... <script> <?php echo 'var finish = ' . $finish . ';'; echo 'var url = "' . $url . '";'; /* var finish = 21; var url = "http://hoge.com/"; というふうに出力されることを期待する。 */ ?> </script> {literal} <script src="https://code.jquery.com/jquery-1.9.1.min.js"></script> <script src="/js/jquery.countdown.js" type="text/javascript"></script> <script> // ★php のコードで展開された javascript の変数を使って、関数を呼び出す $(function(){ m = getFinishTime(parseInt(finish)); countDown(url); }); </script> {/literal} ...
jquery.countdown.js (抜粋)
function getFinishTime(e){ // ★関数として定義 var datetime = new Date(); return datetime.setTime(datetime.getTime() + ((e) * 1000)); // 秒 } function countDown(url){ // ★引数で受け取る ... if(diff > 0){ ... }else{ //終了した時のテキスト $("#Timer").text('Time Over !!'); location.href=url; // ★引数を使う document.getElementById("intime").style.display = "none"; document.getElementById("timeover").style.display = "block"; } }
... {literal} <script src="https://code.jquery.com/jquery-1.9.1.min.js"></script> <script src="/js/jquery.countdown.js" type="text/javascript"></script> {/literal} <script> // ★php のコードで展開された javascript の変数を使って、関数を呼び出す $(function(){ <?php echo 'var finish = ' . $finish . ';'; echo 'var url = "' . $url . '";'; /* var finish = 21; var url = "http://hoge.com/"; というふうに出力されることを期待する。 */ ?> var m = getFinishTime(parseInt(finish)); countDown(url, m); }); </script> ...
jquery.countdown.js (抜粋)
function getFinishTime(e){ // ★関数として定義 var datetime = new Date(); return datetime.setTime(datetime.getTime() + ((e) * 1000)); // 秒 } function countDown(url, m){ // ★引数で受け取る(終了時刻も) ... if(diff > 0){ $("#Timer").text(sec +'秒'); setTimeout(function() { countDown(url, m); // ★引数として渡す }, 10); document.getElementById("intime").style.display = "block"; document.getElementById("timeover").style.display = "none"; }else{ //終了した時のテキスト $("#Timer").text('Time Over !!'); location.href=url; // ★引数を使う document.getElementById("intime").style.display = "none"; document.getElementById("timeover").style.display = "block"; } }
jquery.countdown.js
$(function(){ m = getFinishTime(parseInt(21)); function getFinishTime(e){ var datetime = new Date(); return datetime.setTime(datetime.getTime() + ((e) * 1000)); // 秒 } countDown(); }); function countDown(){ var startTime = new Date(); var endTime = new Date(m); var diff = endTime - startTime; var times = 24 * 60 * 60 * 1000; var day = Math.floor(diff / times) var hour = Math.floor(diff % times / (60 * 60 * 1000)) var min = Math.floor(diff % times / (60 * 1000)) % 60 var sec = Math.floor(diff % times / 1000) % 60 % 60 var ms = Math.floor(diff % times / 10) % 100 if(diff > 0){ $("#Timer").text(sec +'秒'); setTimeout('countDown()', 10); document.getElementById("intime").style.display = "block"; document.getElementById("timeover").style.display = "none"; }else{ //終了した時のテキスト $("#Timer").text('Time Over !!'); // location.href="http://hoge.com/"; document.getElementById("intime").style.display = "none"; document.getElementById("timeover").style.display = "block"; } }
index.php
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <link href="{$root_surl}css/master.css" rel="stylesheet" type="text/css"> {literal} <script src="https://code.jquery.com/jquery-1.9.1.min.js"></script> <script src="/js/jquery.countdown.js" type="text/javascript"></script> {/literal} </head> <body> <div id="Timer"></div> <div id="intime"> <p>ハロー(*^。^*)</p> </div> <div id="timeover" style="display:none;"> <p>タイムオーバーとなりました(・_・;)</p> </div> </body> </html>
質問文を編集しました。詳細はこちら。
質問文を編集しました。詳細はこちら。