setIntervalについて

このQ&Aのポイント
  • JavaScriptのsetInterval関数を使用して、1秒ごとに数を増やしていく方法についての質問です。
  • startボタンとstopボタンを使用して、setInterval関数を制御する方法についての質問です。
  • setInterval関数を使用して、Timerが起動している場合にはstartボタンを無効化する方法についての質問です。
回答を見る
  • ベストアンサー

setIntervalについて

お世話になります <script type="text/javascript"><!-- window.onload=function() { n=0; Timer = setInterval("ch()",1000); } function ch() { n++; document.getElementById("test").innerHTML = n; } function re() { clearInterval(Timer); } function call() { Timer = setInterval("ch()",1000); } //--></script> <input type="button" onclick="re()" value="reset"> <input type="button" onclick="call()" value="call"> <div id="test"></div> としたときにページを表示したら1秒ごとに<div>『test』に1ずつ数が増えて表示されていき『reset』ボタンを押すとTimerが止まり『call』ボタンを押すとTimerが再開します でもTimerを解除せずに『call』ボタンを押すと1秒に2ずつ、3ずつという風に相乗されていきます(新しいTimerが追加されていく) これをTimerが起動しているときに『call』ボタンを押すとreturn false; 起動していないときにはTimerを起動させるという風にすることは可能でしょうか? (Timerが起動しているときに『call』ボタンを押せないようにする以外に)

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

フラグで管理すればよいのでは? <script type="text/javascript"> window.onload=function() { n=0; Timer = setInterval("ch()",1000); timerFlg=true; } function ch() { n++; document.getElementById("test").innerHTML = n; } function re() { clearInterval(Timer); timerFlg =false; } function call() { if(timerFlg) return false; Timer = setInterval("ch()",1000); timerFlg =true; } </script> <input type="button" onclick="re()" value="reset"> <input type="button" onclick="call()" value="call"> <div id="test"></div>

leap_day
質問者

お礼

回答ありがとうございます なるほどそういった方法がありましたか うまくいきました ありがとうございますm(--)m

関連するQ&A

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

    ひとつのボタンでタイマーを動かしたり止めたりしたいのですが こんにちは 趣味で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> おそれいりますが、どなたか、正しい記述の仕方を 教えていただけないでしょうか? よろしくおねがいします。

  • JavascriptでsetInterval()

    JavascriptでsetInterval()を指定時間後に実行したいのですが、方法が分かりません。 Javascriptは別ファイルになっています。 <div id=header_ko> <img src="data/ball.gif" name="ball" style="position:relative;left:100px;top:15px;" onclick="setInterval('moveBall()',25)"> </div> //ボールを右に少しずつ動かします。 //JSファイルは外部にあり、呼び出します x=100; y=1; function moveBall() { if(x<775){ x+=y; document.ball.style.left=x; } } //xが774のところまで、行ったら、ボールの動きが止まります。 ボールが止まってもプログラムは動いていると聞いて、 setInterval()を使用して、プログラムの上でも停止させたいのですが、 方法が分かりません。 Javascript初心者です。 宜しくお願いいたします。

  • javascriptのストップウオッチのコード

    javascript初級勉強中です。 以下のコードを実行すると(1)小数点第2の動きがおかしい。  (2)一度リセットボタンを押さないとタイマーが動かない。 という2点の不具合が出ます。   どうすれば解決するでしょうか? <!DOCTYPE HTML> <head> <meta charset="utf-8"> <title>ストップウォッチ</title> </head> <body> <h1>ストップウオッチ</h1> <div id="sec" style="font-size:128px">0.00</div> <input type="button" value="Start!" onclick="run();"> <input type="button" value="Stop!" onclick="stop();"> <input type="button" value="Reset!" onclick="reset();"> <script> var statTime, stopTime, running = false, timerId; function run() { if (running)return; running = true; if (stopTime) { startTime = startTime + (new Date()).getTime() - stopTime; } if (! startTime) { startTime = (new Date()).getTime(); } timer(); //タイマー処理回していく } function timer() { document.getElementById('sec').innerHTML = (((new Date()).getTime()- startTime)/1000). toFixed(2); timerId =setTimeout(function() { timer(); //このタイマー自身を回していく }, 100); } function stop() { if (!running) return false; running = false; clearTimeout(timerId); //timerIdを渡して止める stopTime = (new Date()).getTime(); } function reset() { if (running) return;   startTime = undefined; document.getElementById('sec').innerHTML = '0.00'; } </script> </body> </html>

  • javascript クイズ

    こちらの http://okwave.jp/qa/q4105194.html 回答のNo.4の回答者様のソースコードなのですが <html> <head><style>.hid{display:none} .disp{display:block}</style></head> <body> <div id="s0">Start!!<input type="button" value="click" onClick="view();$('s0').className='hid';"></div> <div id="mn"></div> <div id="s1" class="hid"> Q1.どれを選ぶ? <input type="button" value="A" onClick="seikai()"> <input type="button" value="B" onClick="hazure()"> <input type="button" value="C" onClick="hazure()"> </div> <div id="s2" class="hid"> Q2.どれを選ぶ? <input type="button" value="A" onClick="seikai()"> <input type="button" value="B" onClick="hazure()"> <input type="button" value="C" onClick="hazure()"> </div> <div id="s3" class="hid"> Q3.どれを選ぶ? <input type="button" value="A" onClick="seikai()"> <input type="button" value="B" onClick="hazure()"> <input type="button" value="C" onClick="hazure()"> </div> <div id="s4" class="hid"> Q4.どれを選ぶ? <input type="button" value="A" onClick="seikai()"> <input type="button" value="B" onClick="hazure()"> <input type="button" value="C" onClick="hazure()"> </div> <div id="s5" class="hid"> Q5.どれを選ぶ? <input type="button" value="A" onClick="seikai()"> <input type="button" value="B" onClick="hazure()"> <input type="button" value="C" onClick="hazure()"> </div> <div id="hz" class="hid"> はずれでした! <input type="button" value="次に進む" onClick="nextq()"> </div> <div id="sk" class="hid"> 正解です! <input type="button" value="次に進む" onClick="nextq()"> </div> <script> var n=3; var q=5; var f=[]; var l=[]; var c=0; var cntc=0; window.onload=function(){ for(var i=0;i<n;i++){ do x=Math.floor(Math.random()*q)+1; while(f[x]) f[x]=true;l[i]=x; } } function view(){$('s'+l[c]).className='disp';$('mn').innerHTML=c+1+"問目";} function $(o){ return document.getElementById(o); } function hazure(){ $('hz').className='disp';} function seikai(){ $('sk').className='disp'; cntc++;} function nextq(){ $('sk').className='hid'; $('hz').className='hid'; $('s'+l[c]).className='hid'; if(++c>=n) owari(); else view(); } function owari(){ $('mn').innerHTML='正解数は、'+cntc; } </script> このままですと正解と不正解のボタンがそれぞれ一回ずつ押せてしまいます これを正解、不正解のどちらか一回しか押せないようにするにはどうすればよろしいでしょうか? よろしくお願いします。

  • getElementsByNameで要素が取得できない

    久々にJavaScriptを組みました。 以下のソースコードなんですが、ボタンクリック時にalertで「1」 が表示されるはずだと思っているのですが、「0」が返ってきます。 何かおかしなところはありますでしょうか?宜しくお願いします。 <html> <head> <script language="javascript"> function test(){ var obj = document.getElementsByName("name1"); alert(obj.length); } </script> </head> <body> <div name="name1"></div> <button onclick="test();">TEST</button> </body> </html>

  • setTimeout の動作不良?

    setTimeout の中で引用する関数が引用するカッコの中に 引用符で文字列を入れると正常に作動しますが 変数名を入れると、動作が停止してしまうようです。 Win 7 pro 上で、Firefox 、 IE11 の両方で試しましたが どちらも動きませんでした。 おそらく、setTimeout のバグではないかと個人的に考えていますが どのようにして、この問題を解決可能かを 教えて下さい。 <script> function TestA() { setTimeout( "alert('Hello')", 2000) ; } function TestQuote() { var stringQ = 'Hello' setTimeout( "alert(stringQ)", 2000) ; } function TestNoQuote() { var stringQ = 'Hello' setTimeout( alert(stringQ), 2000) ; } </script> </head> <body> <button onclick="TestA()" > Timer 1 </button> <button onclick="TestQuote()" > Timer 2 </button> <button onclick="TestNoQuote()" > Timer 3 </button>

  • JS初心者です。このコードの式を教えてください

    下記はストップウォッチのコードとなります 「startTime = startTime + (new Date()).getTime() - stopTime;」 ここの式の意味がわかりません。 startTimeは 「if (!startTime) { startTime = (new Date()).getTime(); }」 の部分で、0秒にセットされている?と思います。 ですのでストップウォッチをスタートした1秒後にストップを作動させ、再度スタートさせるときの時間は 「startTime = startTime + (new Date()).getTime() - stopTime;」つまり 「startTime = 0秒 + (new Date()).getTime() - 1秒;」 と言い換えられると思います。単純に考えて1秒でストップさせてスタートする時刻も1秒目からですので、自ずと(new Date()).getTime()の中身は2秒になっちゃうと思っているのですが、どこからそのような数字がくるんだよということで絶対に違うと思います。 色々とわかりません。どなたかこの式を教えてください! <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>ストップウォッチ</title> </head> <body> <h1>ストップウォッチ</h1> <div id="sec" style="font-size:128px">0.00</div> <input type="button" value="Start!" id="run"> <input type="button" value="Stop!" id="stop"> <input type="button" value="Reset!" id="reset"> <script> (function(){ var startTime, stopTime, running = false, timerId; document.getElementById('run').onclick = function(){ run(); } document.getElementById('stop').onclick = function(){ stop(); } document.getElementById('reset').onclick = function(){ reset(); } function run() { if(running) return; running = true; if (stopTime) { startTime = startTime + (new Date()).getTime() - stopTime; } if (!startTime) { startTime = (new Date()).getTime(); } timer(); } function timer() { document.getElementById('sec').innerHTML = (((new Date()).getTime() - startTime) / 1000).toFixed(2); timerId = setTimeout(function() { timer(); }, 100); } function stop() { if(!running) return false; running = false; clearTimeout(timerId); stopTime = (new Date()).getTime(); } function reset() { if(running) return; startTime = undefined; document.getElementById('sec').innerHTML = '0.00'; } }()); </script> </body> </html>

  • JavaScriptによるonClickの使い方

    JavaScriptのonClickと関数の使い方で悩んでいます。 現在、divブロック表示非表示切り替えスクリプト:http://designlabolatory.blog16.fc2.com/blog-entry-139.htmlを参考に、ボタンを押して内容の表示・非表示を行いたいと思っています。 <form name="btnname"> <input type="button" name="inpname1" value="▼" onClick="openclosebtn1()"> <div id="openclose1" style="display:none;">  内容:1 </div> <input type="button" name="inpname2" value="▼" onClick="openclosebtn2()"> <div id="openclose2" style="display:none;">  内容:1 </div> <input type="button" name="inpname3" value="▼" onClick="openclosebtn3()"> <div id="openclose3" style="display:none;">  内容:1 </div> </form> 上記のように1つのformの中で、複数の項目のボタンを押して表示・非表示を行うのに、 function openclosebtn1(){ } function openclosebtn2(){ } function openclosebtn3(){ } 3つの関数にそれぞれbuttonのnameとdivのidを変えて書いています。 これを、1つの関数にうまくまとめたいのですが、いまいち方法がわかりません。 JavaScript初心者で、勉強不足なのは重々承知です。 手元にある本を読んでも書き方がわかりません。 わかる方アドバイスお願いします。

  • jQueryで設定したイベントハンドラが消える

    jQueryについての質問です。 ちょっと言葉での説明が難しいので、具体的なコードを記載します。 === JavaScript === var clicked = function () { alert(1); }; var jqButton = $("<input type='button' value='test' />"); jqButton.click(clicked); $(function() { $("#showButton").click(function () { $("#test").html(jqButton); }); $("#hideButton").click(function () { $("#test").html(""); }); }); === HTML === <input type="button" id="showButton" value="show" /> <input type="button" id="hideButton" value="hide" /> <div id="test"></div> showボタンをクリックすると、testボタンが表示されます。 hideボタンをクリックすると、testボタンが消えます。 testボタンをクリックすると、alert(1) が実行されます。 という内容なのですが、一度hideしてから再度showして現れたtestボタンをクリックしても、 何も起きません。 仮に、jqButton.click(clicked); の部分を、 jqButton[0].attachEvent("onclick", clicked); などにすると、再表示させたtestボタンも動作します。 これはjQueryのイベントハンドラ設定APIを使った時特有の症状だと思うのですが、 なぜこのような結果になるのでしょうか。 てっきり、$.click()でイベントハンドラを設定すると、 内部でattachEventとかaddEventListnerとかが走るだけだと想像してましたが・・・ また、attachEventなど使わずに、jQueryの機能を使って、 再表示させてtestボタンも動作させるには、どうしたらいいでしょうか。 ご存知の方いましたら、お願い致します。

  • JavaScriptのストップウォッチについて

    以下のコードでストップウォッチを作りました ここまではできるのですがここに新たな仕様として ・画面を開いてから3秒後に自動でカウントする というコードを入れたいです ですからスタートボタンをなくしてストップとリセットだけにしたいです 初心者なので変なコードになっているかもしれません その時はこうした方がいい!みたいなことを言っていただけるとすごく助かります どなたかご教授お願いします HTMLコード <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link href="css/aaa.css" rel="Stylesheet" /> </head> <body> <h1>ストップウォッチ</h1> <div id="sec" style="font-size:100px;">0.00</div> <input id="btn_start" type="button" value="Start" onclick="start();"> <input id="btn_stop" type="button" value="Stop" onclick="stop();"> <input id="btn_reset" type="button" value="Reset" onclick="reset();"> <script> var sec = 0.00; var timerId; //スタートボタン function start() { timerId = setInterval(function() { sec += 0.01; document.getElementById('sec').innerHTML = Math.round(sec*100)/100; //もしも0.0で表示したければ10にすること },10); //この数字はカウントの速さ0.00表示の時は10! } //ストップボタン function stop(){ clearInterval(timerId); } //リセットボタン function reset(){ document.getElementById('sec').innerHTML = '0.00'; sec = 0.00; } </script> </body> </html> CSSコード body { background-color:#B2B2B2; } h1 { background-color:#00EFFF; } #sec { background-color:#00EFFF; } #btn_start ,#btn_stop ,#btn_reset { margin-top:25px; background: -moz-linear-gradient(top,#BFD9E5, #63B0CF 50%,#0080B3 50%,#09C); background: -webkit-gradient(linear, left top, left bottom, from(#BFD9E5), color-stop(0.5,#63B0CF), color-stop(0.5,#0080B3), to(#09C)); border: 1px solid #DDD; color: #FFF; width: 60px; padding: 10px 0; }

専門家に質問してみよう