質問: em_s+two_digit(hh)+':'+two_digit(mm)+':'+two_digit(ss)+em_e;} // 数値が1桁(0~9)なら、頭に'0'を付け足した文字列を返す関数 function two_digit(d) {if (d < 10) return '0'+d; return d;} ``` ### カウントアップタイマーの見本コードを元にカウントダウンタイマーを作っています。clearIntervalの位置をいろいろ動かしてみましたが上手くいきません。やり方の検索もしましたが同じように作っている人がおらず困っています。修正案でなくても何か気づいたことがあれば教えていただきたいです。よろしくお願いいたします。
回答: // タイマーの開始時刻set var start = new Date(); var prev = start.getSeconds(); window.onload = function() {// タイマー etime のデータ書き換え node_etime = document.getElementById('etime'); node_etime.style.fontSize = '8em'; put_time(node_etime); setInterval('put_time(node_etime)', 1000); ~~if (ss<=0)clearInterval("etime",1000);~~ // タイマーのrestartボタン押下時ハンドラの登録 document.getElementById('restart').onclick = function() { start = new Date(); }}; // etime用 // 経過時間を計算して、文字列として構築する function put_time(node) {var curr = new Date(); var s = curr.getSeconds(); if (s == prev) return; prev=s; // 現在時刻currと開始時刻startの差を計算し(単位はミリ秒)、 // 秒単位に変換するため、1000で割り、整数部分のみを取り出す var e = Math.floor(22+(start - curr) / 1000); // eは経過秒数 var ss = e % 60; // ssにeの分未満の部分を取り出す e = Math.floor(e/60); // eを分単位(整数)に変換 var mm = e % 60; // mm にeの時間未満の部分を取り出す e = Math.floor(e/60); // eを時間単位(整数)に変換 var hh = e; // hh にe(時間部分)を設定 **if (ss<0) {clearInterval(etime); return;} //return;がなかったので止まりませんでした!** var em_s = em_e = ''; if (ss<=10) {em_e=''; node.style.color='red';} //10s前に赤くなる else {node.style.color = '#000000';} // hh:mm:ss 形式でnode内のHTMLを書き換え node.innerHTML = em_s+two_digit(hh)+':'+two_digit(mm)+':'+two_digit(ss)+em_e;} // 数値が1桁(0~9)なら、頭に'0'を付け足した文字列を返す関数 function two_digit(d) {if (d < 10) return '0'+d; return d;}