タイマーを動かしたり止めたりできるボタンの実装方法

このQ&Aのポイント
  • JavaScriptを使用して、タイマーを動かしたり止めたりできるボタンの実装方法について教えてください。
  • 以下のサイトからテトリスのコードをダウンロードしましたが、プレイ中にタイマーを一時停止できるポーズボタンを追加したいと考えています。
  • 現在のコードでは、ポーズボタンを押してもタイマーが一時停止されず、再度呼び出されるとタイマーの間隔が短くなってしまいます。正しい記述方法を教えていただけないでしょうか?
回答を見る
  • ベストアンサー

ひとつのボタンでタイマーを動かしたり止めたりしたいのですが

ひとつのボタンでタイマーを動かしたり止めたりしたいのですが こんにちは 趣味でjavascriptをしているものです 以下のサイトから、テトリスのコードをダウンロードしたのですが、 http://java.aimary.com/ このjavascriptの動くhtml内に  gameInterval(ゲーム内のタイマー変数)を 使って、ポーズボタンのようなものを追加したいと思ったのですが、 以下のコードのようにすると、いったん停止したとおもったら、 再びタイマーが呼び出され、何度も押すと、タイムインターバルが 短くなっていきました。 //headに追加 function clear_timer() { var obj = document.getElementById("timer_control"); clearInterval( gameInterval ); obj.detachEvent('onclick', clear_timer); obj.attachEvent('onclick', set_timer ); } function set_timer() { var obj = document.getElementById("timer_control"); obj.detachEvent('onclick', set_timer ); obj.detachEvent('onclick', clear_timer ); gameInterval = window.setInterval("Handle_Interval()", (maxspeed-speed+1)*60); obj.attachEvent( 'onclick', clear_timer ); } //bodyに追加 <div style='position:absolute; left:520px; top:100px;'> <form name='Form1'> <input type="button" id="timer_control" value="pause" onclick="JavaScript:clear_timer();"> </form> </div> おそれいりますが、どなたか、正しい記述の仕方を 教えていただけないでしょうか? よろしくおねがいします。

noname#173931
noname#173931

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

<input type="button" id="timer_control" value="pause" onclick="JavaScript:clear_timer();"> クリックするたびに、とくていのかんすうが1つよばれればよいので toggleTimer とでもしようか。 onclick="JavaScript:clear_timer();" の、「JavaScript:」は、らべるにしかならないので、ひつようなし。 <input type="button" id="timer_control" value="pause" onclick="toggleTimer();"> clear_timer() と、set_timer()を、1つにし toggleTimer() にする この2つのなかで、clickいべんとをつけたりはずしたりするのも、ひつようなし。 (inputようその、onclick でよばれるのだから、むよう) gameInterval = window.setInterval("Handle_Interval()",(maxspeed-speed+1)*60); ここで、変数 gameInterval、maxspeed、speed はぐろーばるへんすうで (どこからでもへんこうできる) たいまーくりあーするときに、へんすう gameInterval もくりあーしておくと それをきじゅんに、たいまーがどうさちゅうなのか、とまっているのかはんだんできる setInterval のまえにある、window は、しょうりゃくできるよ たいまーのひきすうにもじれつをわたすのは、ださ~~い。 "Handle_Interval()" を "Handle_Interval" に。 いじょうをふまえて function toggleTimer () {  if (gameInterval) {   clearInterval (gameInterval);   gameInterval = null;  }    else {   gameInterval = setInterval (Handle_Interval, (maxspeed-speed + 1) * 60);  } } もし、みじかくしたいのなら(やっぱり?)みかくにんだけど function toggleTimer () {  gameInterval = gameInterval ?   (clearInterval (gameInterval), null):   setInterval (Handle_Interval, (maxspeed-speed + 1) * 60); } みじかくなってない? あぁ~~。 そうそう、ぜんかくくうはくは、はんかくに。これmyおきまりだから ^^;

noname#173931
質問者

お礼

よく回答していただきありがとうございます。 以前に回答していただいたもので、できるのか、 とあとになっておもいついたのですが・・・ また、なにか質問させていただいたときはよろしくお願いします。

その他の回答 (1)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

投稿前に、ごはん食べてたら、良い回答がついたみたいだけど、 せっかくだから <div id=akiko_div> <INPUT type="button" STYLE="color:#FFFFFF;font-family:Copperplate Gothic light" value="やりなおす" onclick="javascript:location.reload(true)"> <input type="button" onclick="pause();" value="PAUSE"> </div> <script type="text/javascript"> function flip(init){ var respons=init; return function(){ respons = !respons; return respons; } } var pause_flg=flip(false); function pause(){ if('undefined' != typeof gameInterval){ if(pause_flg()) clearInterval(gameInterval); else gameInterval=window.setInterval("Handle_Interval()",(maxspeed-speed+1)*60); } } </script> </body>

noname#173931
質問者

お礼

二度目の回答をしていただき、ありがとうございます。 no.1さんに以前教えていただいた方法を後から 思い出してしまいました。 お手間をとらせてしまって申し訳ありません 貴重な時間をさいての回答、ありがとうございました。

関連するQ&A

  • 画面が遷移したみたいになってしまいます。

    画面ロード後にjavascriptで動的にまたjavascriptタグを表示しています。 以下のjavascriptを組み込んでみたところ、取得したjavascriptを表示したときに画面遷移したみたいになってしまいました。 どうすればきちんと表示されるようになるでしょうか。 <div id="position"></div> <script language="javascript">// <!-- var timer = setInterval("Timer()", 1000); function Timer() { var position = document.getElementById('position'); var script = document.createElement('script'); script.setAttribute('type', 'text/javascript'); script.setAttribute('src', 'http://hogehoge/getjs'); position.appendChild(script); clearInterval(timer); } // --></script> http://hogehoge/getjsからはコンテンツの部品を表示するjavascriptが入っています。

  • DOMで作ったラジオボタンが選択できない

    JavaScript DOM で作成したラジオボタンが選択できません。 Sleipnirの「選択部分のソースを表示」で確認したところ、 name属性だけがセットされていないようで、選択できない原因はそれだと思いますが、 セットできない理由が分かりません。 どなたか解決策を教えて頂けないでしょうか。 なお、下記の何れの方法でもダメなようです。 obj.name = "hogehoge" obj.setAttribute("name", "hogehoge"); 念のため、現象確認用のソースも貼っておきます。 <html> <head> <script type="text/javascript"> function create1() { var rObj = document.createElement("input"); rObj.type = "radio"; rObj.name = "rd"; rObj.value = 5; var divObj = document.getElementById("box"); divObj.appendChild(rObj); } function create2() { var rObj = document.createElement("input"); rObj.setAttribute("type", "radio"); rObj.setAttribute("name", "rd"); rObj.setAttribute("value", "3"); var divObj = document.getElementById("box"); divObj.appendChild(rObj); } </script> </head> <body> <input type="button" value="create1" onClick="create1()"> <input type="button" value="create2" onClick="create2()"> <div id="box"></div> </body> </html>

  • javaスクリプトについて質問です。カウントダウンタイマーなのですが、

    javaスクリプトについて質問です。カウントダウンタイマーなのですが、下記コードを入力したのですが、ホームページ上ではうまく作動しません。どこを訂正したらよろしいのでしょうか? わかる方教えて下さい。 <!--カウントダウンタイマーここから--> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="cookie.js"></script> <script type="text/javascript" src="check.js"></script> <script type="text/javascript"> <!-- start of JavaScript // 有効期限を取得 var timeLimit = getTimeLimit( 1259629393, 'http://', 192 ); // 初回アクセス日を取得 var firstTime = '<div>初回アクセス:' + getFirstTimeAccess() + '</div>'; // 残り時間を表示 $( function() { displayCountDown(); } ); function displayCountDown() { var timer; var today = new Date() var days = Math.floor( ( timeLimit - today ) / ( 24 * 60 * 60 * 1000 ) ); var hours = Math.floor( ( ( timeLimit - today ) % ( 24 * 60 * 60 * 1000 ) ) / ( 60 * 60 * 1000 ) ); var mins = Math.floor( ( ( timeLimit - today ) % ( 24 * 60 * 60 * 1000 ) ) / ( 60 * 1000 ) ) % 60; var secs = Math.floor( ( ( timeLimit - today ) % ( 24 * 60 * 60 * 1000 ) ) / 1000 ) % 60 % 60; var milis = Math.floor( ( ( timeLimit - today ) % ( 24 * 60 * 60 * 1000 ) ) / 10 ) % 100; if(( timeLimit - today ) > 0){ timer = '<div>残り ' + days + '日 ' + addZero( hours ) + '時間 ' + addZero( mins ) + '分 '+ addZero( secs ) + '秒 ' + addZero( milis ) + 'です。</div>' $( '.countdown' ).html( firstTime + timer ); tid = setTimeout( 'displayCountDown()', 10 ); }else{ location.href='http://'; return; } } // end of JavaScript --> </script>

  • ボタンに書かれている文字の入れ替え

    2つのボタンのどちらを押しても、ボタンに書かれているアルファベットが入れ替わるようにしたいのですが、うまくいきません。 alert(obj1)、alert(obj2)などとして、A,Bともに読み込まれているようなのですが、alert(tmp)の時はundefinedがでます。 どこが間違っているのかよろしければ教えてください。 <!doctype html> <html> <head> <meta charset="utf-8"> <title>勉強中</title> </head> <body> <script> function change_alphabet() { var tmp; var obj1 = document.getElementById("button_1").value; var obj2 = document.getElementById("button_2").value; // alert(obj1); // alert(obj2); tmp = obj1.innerHTML; // alert(tmp); obj1.innerHTML = obj2.innerHTML; obj2.innerHTML = tmp; // alert(obj2); } </script> < input type = "button" id = "button_1" value = "A" style = "width: 25px; height: 25px" onclick = "change_alphabet()" > < input type = "button" id = "button_2" value = "B" style = "width: 25px; height: 25px" onclick = "change_alphabet()" > <body> </html>

  • jsで次のELEMENT_NODEを見つけたい

    しごく単純な質問かもしれませんが、検索エンジン等で捜しても見つからなかったのでご教授頂けないでしょうか?(検索の仕方が悪いかもしれません。。。) たとえば以下の簡単なjavascriptがあるとします。 <body> <div id="test1">hogehogehoge</div> <div>fugafugafuga</div> <script type="text/javascript"> var obj = document.getElementById('test1'); console.log(obj.nextSibling); </script> </body> この場合、nextSiblingで取得した値は次のテキストノードになってしまいます。 決めうちであれば以下のようにやってみたらうまくいきましたが、 なんだかなぁ~って感じです。 <script type="text/javascript"> var obj = document.getElementById('test1'); console.log(obj.nextSibling.nextSibling); </script> jQueryで言うところのsiblings()のような使い方、またはソースをご教授いただけないでしょうか?(できれば説明文も添えて頂ければ助かります) 一応jQueryのソースを読もうとしましたが、まことに恥ずかしいのですが力不足でまるで読むことができませんでした。 以上よろしくお願いいたします。

  • プロパティのチェンジ

    いつもこちらでお世話になっております。 下記のようなJavascriptとCSSでタブでの切り替えパネルを作ろうと思っています。 【header】 <script type="text/javascript"> function MM_changeProp(objId,x,theProp,theValue) { //v9.0 var obj = null; with (document){ if (getElementById) obj = getElementById(objId); } if (obj){ if (theValue == true || theValue == false) eval("obj.style."+theProp+"="+theValue); else eval("obj.style."+theProp+"='"+theValue+"'"); } } </script> 【CSS】 #panel2 {display:none;} 【body】 <a href="#" onclick="MM_changeProp('panel1','','display','block','DIV')">AAA</a> <a href="#" onclick="MM_changeProp('panel2','','display','block','DIV')">BBB</a> <div id="panel1">AAAに関する内容</div> <div id="panel2">BBBに関する内容</div> 現状では、リンク「BBB」をクリックしても切り替えにはならず、単に下に表示されるだけの状態です。 クリック時に該当displayをblockにするだけでなく、その時点で表示されているdisplayをnoneにすればいいのかな、 というあたりまでは推測できるのですが、その命令の追加方法が分かりません。 何卒アドバイスを宜しくお願い致します。

  • if構文

    初心者でif構文がよくわからず質問させてください。 下記のようなボタンをつくり、 <form action="#"> <input type="button" value="うさぎ" id="txt" onclick="aGetElementById()" /> <input type="button" value="とり" id="txt" onclick=b"GetElementById()" /> </form> ボタンをクリックして、 <div><span id="box"></span>が大好きです。</div> のspanの中にvalue名(うさぎ・とり)を表示させ、『「value名」が大好きです。』と表示させたいのです。 Javascriptを下記のように書いてみたのですが、テキスト表示の切り替えがうまくいきません。 <script> <!-- function aGetElementById(){ var text=document.getElementById("txt"); var box=document.getElementById("box"); box.innerHTML=txt.value; } function bGetElementById(){ var text=document.getElementById("txt"); var box=document.getElementById("box"); box.innerHTML=txt.value; } --> </script> どうかおしえてください。 よろしくお願いします。

  • ラジオボタンを他の物に変えても動作するようにしたい

    ラジオボタンでチェックされた項目に合わせて用意されている文章が表示されるものです。 そのラジオボタンを<button>や<img>に変えることは可能なのでしょうか。 <!--メニュー--> <div> <form method="get" name="updateHTML"> <input type="radio" name="imageSize" value="00" onclick="return toggle();" checked /> No.01<br /> <input type="radio" name="imageSize" value="01" onclick="return toggle();" /> No.02<br /> <input type="radio" name="imageSize" value="02" onclick="return toggle();" /> No.03<br /> </form> </div> <!--表示文--> <div id="html-00" style="display:inline;"> テキスト01 </div> <div id="html-01" style="display:none;"> テキスト02 </div> <div id="html-02" style="display:none;"> テキスト03 </div> <!--スクリプト--> <script type="text/javascript"> var options = new Array('00','01','02'); function toggle() { var form = document.forms['updateHTML']; var size = _getOption( form.imageSize ); var chosen = size; for ( var i = 0; i < options.length; i++ ) { var htmlId = 'html-'+ options[i]; var html = document.getElementById( htmlId ); if ( (html == null) ) { continue; } if ( options[i] == chosen ) { html.style.display = 'inline'; } else { html.style.display = 'none'; } } return true; } function _getOption(radioObj) { for ( counter = 0; counter < radioObj.length; counter++) { if ( radioObj[counter].checked ) val = radioObj[counter].value; } radioObj.value = val; return val; } </script>

  • Javascriptを短くしたい

    初歩的なことですみません。 Javascriptで表示/非表示を切り替えるものを作ろうと思うのですが、 以下のサンプル文のような形では、項目数が増えるとその分だけ どんどんJavascriptも長くなっていってしまいます。 Javascript文を簡潔にするには、どのように記述すればよいのでしょうか。 よろしくお願いします。 <script type="text/javascript"> <!-- function Hyo1(num) { if (num == 0) { document.getElementById("cont1").style.display="block"; } else { document.getElementById("cont1").style.display="none"; } } function Hyo2(num) { if (num == 0) { document.getElementById("cont2").style.display="block"; } else { document.getElementById("cont2").style.display="none"; } } // --> </script> <div id="cont1">ああああああ</div> <form> <input type="button" value="表示" onclick="Hyo1(0)"> <input type="button" value="非表示" onclick="Hyo1(1)"> </form> <form> <div id="cont2">いいいいいい</div> <input type="button" value="表示" onclick="Hyo2(0)"> <input type="button" value="非表示" onclick="Hyo2(1)"> </form>

  • div要素を滑らかに動かしたい

    <div id="div1" class="div1" onclick="init();">move box</div> 上記のようなdiv要素を、画面右方向へ滑らかに 動かしたいのですが、どのようなscriptを記述すればよいでしょうか? setIntervalを使って0.5秒毎に1ピクセル右に移動、 というのを期待して以下のようなscriptを書いてみたのですが、 うまく動作しませんでした。 function init(){ setInterval(moveY, 500); } function moveY(){ var obj = document.getElementById("div1"); obj.style.left = obj.style.left+1 + "px"; }

専門家に質問してみよう