JavaScriptで一定時間待ってから実行

このQ&Aのポイント
  • JavaScriptでサイトを読み込んで一定時間待ってから実行する方法を教えてください。
  • IE・Firefox・Chromeでは正常に動作するが、Windows用Safariで動作がおかしくなる問題が発生しています。
  • サイトを開いた時にループするサウンドを鳴らしており、Safariでは一定時間で待つ時間で止まってから再度始めから鳴ります。
回答を見る
  • ベストアンサー

JavaScriptで一定時間待ってから実行

サイトを読み込んで一定時間待ってから実行する、JavaScriptの記述でを教えてください。 情報サイトを参考にし、自分なりにコードを書いてみました。 現在、IE・Firefox・Chromeでは正常に動作しますが、 Windows用Safariでのみ動作がおかしくなっています。 私の記述が間違っていると思います。 下記にコードを記述しました、ご指摘いただけませんでしょうか。 <サウンドとSafariの動作について> サイトを開いた時にサウンド(2.5秒位)を鳴らしています。 サウンドはループしています。 Safari以外はサウンドが全て鳴り終わってからループします。(正常) Safariのみサウンドが全て鳴り終わらずにループします。 (下記記述の一定時間で待つ時間で止まってから再度はじめから鳴ります) 全くの素人で大変恐縮ですが、ご指摘よろしくお願いします。 【コード】 jQuery(document).ready(function(){ setTimeout('stop()', 2000); }); function stop(){ musicjs.createAll(); }

  • tsyok
  • お礼率90% (29/32)

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

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

setTimeout('stop()', 2000); ↓ setTimeout("stop()", 2000); php脳になってるけどシングルじゃ動かなかったような? timer作ってclearTimeoutで破棄した方が安全ではある。 var timer = setTimeout("stop()", 2000); clearTimeout(timer);

tsyok
質問者

お礼

CyberCypherさん 返信遅くなりまして、大変申し訳ございません。 教えていただいた記述を試しましたが、うまくいきませんでした。 私の技術では難しいところがあるようです。 私自身でも勉強して解決できるようにしていきます。 一旦、質問は解決とさせていただきます。 ご回答・ご協力ありがとうございました。

関連するQ&A

  • 一定時間後にsetIntervalでループ処理を行うにはどうしたらいい

    一定時間後にsetIntervalでループ処理を行うにはどうしたらいいのでしょうか。 JavaScriptにwait関数があれば早いのですが、setTimeout()のなかに入れ込むしか思いつきません。 forやwhile等で空ループさせて終了後に実行という方法も考えましたが、CPUに余計な負荷がかかるみたいでこれは避けたいです。 具体的には次のようなことがしたいと思っています。 function(a,b,c){ setTimeout(function(){ setInterval(function(){} ,10 ) },c) しかしこれだと再下段の関数が実行されないようです。またループ処理は可能な限りsetInterval()にさせたいと思っています。クロージャで解決できるんでしょうか。何か良い方法がありましたらお願いします。

  • 一定時間停止後フレーム移動

    初心者ですがよろしくお願いします。 ActionScript3.0にて 一定時間後に任意のフレームまで戻るを実行したいのですが 一定時間止まらずにフレームまで戻ってしまいます。 下記の記述は間違ってますか? 一定時間停止の記述法は色々あるみたいですが いくつかやってみたところエラーばっか出て動きませんでした。 この記述だとちゃんと停止するのですが gotoAndPlay(10); を付けると停止しません。 this.stop(); this.iid = setInterval (function (m) { m.play (); clearInterval (m.iid); }, 3000, this); gotoAndPlay(10);

    • ベストアンサー
    • Flash
  • JavaScript アニメのループ動作について

    iOSでSWFが動かないことから、JavaScript で簡単なアニメを作ろうと思っています。 初めてなので、アニメのループ動作に詳しい方教えてください。 (jQueryと合わせて、動作させます) 2個の動作を定義しています。 《動作A》 $(function(){ setTimeout(function(){ $('#photo').animate({ width: "776px", opacity: 1, }, 1500 ); },500); //500遅らせる指示 }); 《動作B》 $(function(){ setTimeout(function(){ $('#word').animate({ width: "398px", opacity: 1, }, 3000 ); },700); //700遅らせる指示 }); このうち、動作Bのみを 動作完了 → 1000msec 表示キープ → 3000msec の逆動作で消える → 1000msec 表示無し これを一連の動作として、ループさせたいのです。 interval 関連のコマンドの説明を見ましたが、自分にはわかりませんでした。 《動作B》に書き足して、ループできるなら、具体的記述で教えてください。 以上、よろしくお願いします。

  • 一定時間がきたら表示を消したい

    window.statusを使用して、一定時間がきたら表示を消すように記述するにはどうすればよろしいでしょうか? 以下にソースを記述しています。どなたか教えてください。 <head> <script language="javascript"> <!-- function a() { window.status=new Date().getHours()+"時"+new Date().getMinutes()+"分"+new Date().getSeconds()+"秒"; b=setTimeout("a()",500); } //--> </script> </head> <body onLoad="a()"> </body>

  • 一定時間がきたら表示を消すようにしたい

    window.statusを使用して、一定時間がきたら表示を消すように記述するにはどうすればよろしいでしょうか? 以下にソースを記述しています。どなたか修正してください。 <head> <script language="javascript"> <!-- function a() { window.status=new Date().getHours()+"時"+new Date().getMinutes()+"分"+new Date().getSeconds()+"秒"; b=setTimeout("a()",500); } //--> </script> </head> <body onLoad="a()"> </body>

  • 一定時間ごとにカウント

    iを0として、一定時間たったらiを1プラスしたいのですが、 どのようにしたらいいかわかりません。 setIntervalを使って下記のとおり記述してみました。 var i = 0; function cnt(){ i++; } setInterval(cnt,1000); trace(i); しかし、iはいつまでたっても0のままです。 たとえば20秒ごとにiを1プラスしていくといった場合は、 どのように記述したらいいのでしょうか。 Flash CS3、WinXP、AS2.0です。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • javascriptのforループ中の変数について質問です。

    javascriptのforループ中の変数について質問です。 下記のようなコードを書きました。 function test(){ for (i = 0;i < 3;i++){ var msg = "msg"+i; setTimeout(function(){ alert(msg); },1000 * i); } } これを実行すると、1秒間隔で順番に"msg2"→"msg2"→"msg2"と表示されます。 しかし、期待する動作は1秒間隔で順番に"msg0"→"msg1"→"msg2"なのです。 この動作を実現するために、どのようにスクリプトを修正すればよいか、ご教授いただければ幸いです。

  • JavaScriptのsetTimeoutについて

    setTimeoutのタイマー処理の仕様を調べています。 var func = function () { alert(1); }; setTimeout(func, 1000); alert(2); このコードを実行した場合、alert(2)→alert(1)の順で処理されるのは当然ですが、 alert(2)を開いたまま1秒以上待ち、そこでOKボタンを押すとどうなるか、という問題です。 Firefoxの実装については下記ページで分かりました。 http://takoyakim.tumblr.com/post/10875885/firefox-settimeout 先ほどのコードの1000ミリ秒の経過処理は、タイマースレッドという専用スレッドで扱うため、 alert(2)で1000ミリ秒以上止めた後にOKボタンを押すと、即座にalert(1)が開きます。 しかしIEの場合はそうではなく、alert(2)を閉じてから約1000ミリ秒後にalert(1)が開きました。 alert(2)を開いたままどれだけ待機しても変わりません。 ChromeやSafariもIEと同じようです。 ですがこの結果は、次のコードの実行結果と矛盾してしまいました。 var heavyFunc = function () { for(var i = 0; i < 100000; i++) new Date(); } var startTime = +new Date(); var callCount = 0; var testFunc = function (x) { heavyFunc(); // (1) if (++callCount < 5) setTimeout(testFunc, 100); else alert(+new Date() - startTime); //heavyFunc(); // (2) }; testFunc(); heavyFuncという重い処理を、setTimeoutの前後のどちらに置くかという実験コードです。 setTimeoutのタイマー処理がFirefoxのように別スレッドで実行されているのであれば、 先にsetTimeoutを呼び出してからheavyFuncを実行した方が速く処理が完了するだろう、という想定です。 そして結果は、FirefoxだけでなくIEとChromeでも先にsetTimeoutを呼んだ方が速い、となりました。 結局どのブラウザも専用のタイマースレッドを実装しており、 alert関数が特殊(タイマースレッドもブロックする)なだけ、ということなのでしょうか? それとも私が何か見落としているのでしょうか。

  • firefoxやIEを使ってインターネットをしているのですが、一定時間

    firefoxやIEを使ってインターネットをしているのですが、一定時間(1時間前後)経過するとサイトが表示できなくなります。safariでも試してみたのですがこちらも駄目でした。 OSはVistaです。 サイトが表示されなくなった時に出るエラーは、 firefoxでは「正常に接続できませんでした」IEでは「Internet explorerではこのサイトは表示できません」 safariでは「ページを開けません」です。 現在の接続先を確認してみると、アクセス:ローカルネットワークとインターネットとなっており、接続できている状態と同じなんです。。 パソコンを再起動したり、長時間放置しているとまた繋がるようになります(結局また繋がらなくなるのですが・・) Wiiのインターネット接続は正常にできているのでPCの方に問題があると思うのですが・・ 類似の質問がいくつかあったのですが、それを見ても解決に至らなかったので質問させていただきました。

  • JavaScriptで時間指定をして表示を切り替え

    JavaScriptで時間指定をして表示を切り替えたいのですが safariだけうまく動作しません、下記のjsファイルを読み込んでHTML側には <div id="hoge1">切り替え前の内容</div> <div id="hoge2">切り替え後の内容</div> としています。 解決策があればご教授お願い致します。 window.onload = changeDisplay; function changeDisplay(){ var objDate = new Date(); var now = objDate.getTime();//現在のタイムスタンプ(ミリ秒)を取得 var changeTime = new Date("Jan 1, 2011 00:00:00");//切り替える日時のタイムスタンプ(ミリ秒)を取得 //切り替え前 if (now < changeTime) { document.getElementById('hoge1').style.display = "block"; document.getElementById('hoge2').style.display = "none"; setTimeout("changeDisplay()", 1000);//1秒ごとに実行(◯秒ごとの場合は、第2引数に 「◯ * 1000」 と記述) //切り替え後 } else { document.getElementById('hoge1').style.display = "none"; document.getElementById('hoge2').style.display = "block"; } }

専門家に質問してみよう