clearIntervalの使い方と記述方法について

このQ&Aのポイント
  • jQueryを使用してオープニングムービーのようなものを作りたい場合、setIntervalを使って繰り返し動作させることができます。しかし、動作を停止させるためにはclearIntervalを使用する必要があります。具体的なコードの記述方法は以下の通りです。
  • $(document).ready(function(){でページの読み込みが完了した際に実行する処理を定義し、要素の初期状態を設定します。
  • fadeToメソッドを使用して要素をフェードインさせる処理を実行し、setIntervalを使用して一定の時間毎にフェードイン処理を繰り返します。繰り返し処理を停止させるためには、clearIntervalを使用してタイマーを停止します。このようにコードを記述することで、オープニングムービーのような効果が実現できます。
回答を見る
  • ベストアンサー

clearIntervalの記述方法について

よろしくお願い致します。 jQueryにて「setInterval」を使用して、オープニングムービー(?)のようなものを作りたいと思い、見よう見まねで下記のようなコードを作りました。 取りあえず動作するようになったのですが、繰り返し動作を止めるための「clearInterval」の使い方が分かりません。 この場合、どのようにコードを記述すればよいのでしょうか? お手数ですが、どうぞご教授下さいますようお願い致します。 $(document).ready(function(){ $("#A").fadeTo(0,0); $("#B").fadeTo(0,0); $("#C").fadeTo(0,0); var timerId1 = setInterval(function(){ $("#A").fadeTo(1000,1); var timerId2 = setInterval(function(){ $("#B").fadeTo(1000,1); var timerId3 = setInterval(function(){ $("#C").fadeTo(1000,1); }, 1000); }, 1000); }, 1000); });

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

一度しか実行しないようですので、setIntevalを用いずにsetTimeoutを用いれば止める必要もなくなります。 ちなみにsetIntervalのクリアの方法は、そのidを用いて  clearInterval(timerId) です。 ところで、同様の効果を得るためにfadeInがありますのでそちらを利用して、また、callback関数を利用すれば… $(document).ready(function(){  $("#A,#B,#C").hide();  $("#A").fadeIn(1000, function(){   $("#B").fadeIn(1000, function(){    $("#C").fadeIn(1000);   });  }); }); でも、同様のことが行なえると思います。(全角空白は半角に)

patsaysnow
質問者

お礼

ありがとうございます! setIntervalからsetTimeoutに変えたところ、問題なく動作致しました。 また、fadeInについてもご教授頂き、重ねて御礼申し上げます。 本当にありがとうございました。

関連するQ&A

  • 数秒後に別フレームにとばす方法

    1フレーム目で画像を読み込み10秒表示させた後に2フレーム目でまた10秒表示させるといった事を試しています。 表示させる画像はムービークリップで最後の1秒でフェードアウトさせるようにしているのですが 完全にフェードアウトする前に2フレーム目に飛んでしまいます。 何か解決方法はないのでしょうか?? 1フレーム目 ---------------------------------------------------------- this.stop(); timerID = setInterval(startMovie, 10000); function startMovie() { clearInterval(timerID); gotoAndStop(2); } 2フレーム目 ---------------------------------------------------------- this.stop(); timerID = setInterval(startMovie, 10000); function startMovie() { clearInterval(timerID); gotoAndStop(1); } ちなみにgotoAndStop();を消すとそのフレームでループしますが完全にフェードアウトしてくれます…。

    • ベストアンサー
    • Flash
  • jqueryについて困っております。

    下記のスライドショーを同一ページ内に複数つけたいのですが、 バグがでてしまいます。 おそらく変数がバッティングしてしまっていて、photogallery1とphotogallery2が 干渉しあわないようにしたいのですが、どのようにしたらいいかわかりません。 ご教示いただければ幸いです。 すみません大変急いでおりまして、出来ればすぐに皆様のお力を貸していただければ と思っております。よろしくお願いいたします。 $(function(){ pg('#photogallery1'); pg('#photogallery2'); function pg(selector){ $(selector).each(function(){ var photo = $(".photoBox").find('li'); var thumb = $(".thumbBox").find('li'); var fadeSpeed = 400; var changeSpeed = 4000; var photoLength = photo.length; var nowBox = 0 photo.filter(":not(':eq(0)')").hide(); var timer = setInterval(slideshow , changeSpeed); function slideshow(){ if(nowBox == photoLength - 1){ photo.fadeTo(fadeSpeed , 0); nowBox = 0; photo.eq(nowBox).fadeTo(fadeSpeed , 1); }else{ photo.fadeTo(fadeSpeed , 0); nowBox ++; photo.eq(nowBox).fadeTo(fadeSpeed , 1); } }; thumb.hover(function(){ clearInterval(timer); $(this).stop().fadeTo(fadeSpeed , 0.6); nowBox = $(this).index(); photo.stop().fadeTo(fadeSpeed , 0) .eq(nowBox).stop().fadeTo(fadeSpeed , 1); },function(){ timer = setInterval(slideshow , changeSpeed); $(this).stop().fadeTo(fadeSpeed , 1); }); }); }; });

  • 同じ内容のスクリプトを同一ページに実装

    同じボタンを特定回数連続で自動クリックするjavascriptを組みました。 (スクリプト名 loadHello) 下記で問題なく動作しました。 <script type="text/javascript"> //Searchボタンを0.5秒ごとに12回クリック window.onload = function loadHello(){ var counter = 1; var timerId = setInterval(function(){  document.getElementById('search_button').click(); if(counter >= 12){ clearInterval(timerId); } counter++; }, 500); } </script> <form id="searchform" name="searchform" method="POST"> <input type="hidden" name="play" id="play" value=""> <a id="search_button">search_button</a> </form> 次に、同じページに同様の働きをするloadHello2を組みました。 <script type="text/javascript"> //Searchボタンを0.5秒ごとに12回クリック window.onload = function loadHello2(){ var counter2 = 1; var timerId2 = setInterval(function(){  document.getElementById('search_button2').click(); if(counter2 >= 12){ clearInterval(timerId2); } counter2++; }, 500); } </script> <form id="searchform2" name="searchform2" method="POST"> <input type="hidden" name="play" id="play" value=""> <a id="search_button2">search_button2</a> </form> 上記のloadHelloとloadHello2を同じページに記載すると、なぜかloadHello2だけしか動作しません。 単純なミスと思いますが、ご指導いただきたくお願いいたします。

  • 簡単なサンプルが動かないのはなぜ?

    超初心者です。 自力でがんばろうと、いろんなBBSの過去記事を除きやってるのですが 動きません。 たとえば //timerObjオブジェクトの設定 timerObj = new Object(); timerObj.timeout = function() { clearInterval(timerID); // インターバルの終了 }; //計測開始(5秒でタイムアウト) var timerID = setInterval(timerObj, "timeout", 5000); このようなサンプルを見つけ5秒間待つアクションを ちゃんとフレームアクションに入れました でも希望のとおり動きません。 初めは「制御」メニューのシンプルアクションをONにするのを知らずに やっていましたが、今は分かっています。 STOP(); だけのフレームアクションは利いていますので。。。 ちなみに //timerObjオブジェクトの設定 timerObj = new Object(); timerObj.timeout = function() { clearInterval(timerID); // インターバルの終了 stop(); }; //計測開始(5秒でタイムアウト) var timerID = setInterval(timerObj, "timeout", 5000); こうやってstop();をつけてもそこではとまりません。 シンタックスのエラーもないということは 何か設定かがおかしいのかもしれません。 もちろんキーフレームになっています。 もうちんぷんかんぷんです。 どなたかお助けを・・・・ VBAのソフト開発などはそれなりにしています。 なんでこんなこともわからんのか自己嫌悪になっております。

    • ベストアンサー
    • Flash
  • jQueryの記述についてご指摘ください。

    jQuery初心者で大変恐縮ですが、質問させていただきました。 「mLivre」というプラグインを使用しております。(下記URLを参照ください) ※参考サイト 雑誌をめくるようにぺらっと画像を表示するスクリプト -mLivre http://coliss.com/articles/build-websites/operation/javascript/jque... このプラグインは本をめくるように画像を表示してくれるプラグインです。 レスポンシブでも動くようにしたいと思い、コードを記述してみました。 画像自体はレスポンシブになりましたが、プラグインの動作が少しおかしくなってしまいました。 リサイズすると、めくる様な動作をしてくれますが、画像が切り替わらなくなってしまいました。 原因は、リサイズ時に画像の枚数のカウントがおかしくなっているせいだと思いますが、 どう変えればいいのかわからずに困っております。 「mLivre.js」自体はいじっておりません。 スクリプト実行部分に記述を追記いたしました。 下記にコードを記述いたしましたので、もしよろしければご指摘いただければと 思います。 よろしくお願いいたします。 ------------コード--------------- jQuery(document).ready(function() { var imgW; var imgH; var winW; var scaleW; var setW; var setH; setSize(); //リサイズしたら実行 jQuery(window).resize(function(){ setSize(); }); function setSize() { //元の画像サイズ指定 imgW = 500; imgH = 375; //横幅に合わせて縦幅の調整 winW = jQuery( '#page' ).width(); scaleW = winW / imgW; setW = winW; setH = imgH * scaleW; //要素の画像サイズ jQuery("#slide img").width(setW); jQuery("#slide img").height(setH); //実行部分 jQuery('#slide').mLivre({ width:setW, height:setH, dossier:'http:/画像のURL/images... }); } });

  • jquery not()がきかない

    jqueryについて1点だけ教えて頂きたいことがございます。 今、下記のjqueryにてロールオーバー時のイベントを実行しています。 $('a:not(.current) img').each(function() { var target = $('a:not(.current) img') target.hover(function(){ $(this).stop().fadeTo(500,0.6); }, function() { $(this).stop().fadeTo(500, 1); }); }); それともう一つjqueryである一部分だけ違うロールオーバーにしたく、 全体にかかる上記のjqueryで、#photogalleryというID以外の(a:not(.current) img)にしたいのですが、 ('a:not(.current) img')を $('div').not('#photogallery').find('a:not(.current) img') このようにしてみたのですが、#photogalleryまで実行されてしまいます。 調べて見たのですがわからず、教えて頂ければ幸いです。 どうぞ宜しくお願い致します。

  • 一定時間が経過した後のフレーム移動について

    Flash初心者です。うまく質問したいことが伝わるか心配ですが、どうぞ宜しくお願いします。 タブメニュー型のムービーを作成していまして、10秒経過すると次のタブが開き、 また10秒すると次のタブが開く…。このループです。 タブの数は4つ。1フレームごとにそれぞれのタブが開いているように画像で見せておいて(計4フレームを使用)、 スクリプトで10秒の間隔をおき、次のフレームに移動させる仕組みになっています。 タブにはクリックできるようにボタンが仕込んであり、クリックするとムービーの流れ(再生されている順)に関係なく、 そのタブに移動します(2つ目のタブなら2フレーム目を再生)。 (タブの部分のテキスト、タブが開いたときに表示されるバナー画像は外部読み込みになっています。 ただ、この外部読み込みに関しては質問の内容に影響しないと思いますので詳しくは説明しないでおきます。) スクリプトは下記のとおりです。(注:教えて!gooにあったものを使わせていただきました。) ※1フレーム目 --------------------------------------------------------------------- this.stop(); timerID = setInterval(startMovie, 10000); function startMovie() { gotoAndPlay(2); clearInterval(timerID); } ※2フレーム目 --------------------------------------------------------------------- this.stop(); timerID2 = setInterval(startMovie2, 10000); function startMovie2() { gotoAndPlay(3); clearInterval(timerID2); } ※3フレーム目 --------------------------------------------------------------------- this.stop(); timerID3 = setInterval(startMovie3, 10000); function startMovie3() { gotoAndPlay(4); clearInterval(timerID3); } ※4フレーム目 --------------------------------------------------------------------- this.stop(); timerID4 = setInterval(startMovie4, 10000); function startMovie4() { gotoAndPlay(1); clearInterval(timerID4); } これでちゃんと10秒経過すると次のフレームに移動し、それがループされるのですが 問題は、途中で順に再生されているタブと違うタブをクリックしたときに起こります。 一度、その再生順がクリックすることによって変わってしまうと、元々の『10秒後に次のフレームへの移動』の動きと、 クリックされたタブから『10秒後に次のフレームへの移動』の動きが重複しているようなんです。 ちゃんと確認できたわけではありませんが、複数回これを繰り返すと4つのタブがかなりの速度でパッパッパと遷移し、 まともに見ることすらできないものになってしまいます。 解決したいのは、クリックしたタブ(移動したフレーム)から新たに10秒がカウントされ、10秒後には次のフレームに移動し 10秒経過する前に他のタブをクリックしたときでも、そのタブ(フレーム)に移動してからまた新たに10秒がカウントされる…。 このようにするにはどうしたらいいでしょうか? どうぞご教示ください。

  • jqueryについて

    サムネイルをマウスオーバーすると#targetに拡大画像を表示するものなのですがマウスオーバーで 切り替わりマウスアウトで元に戻るとこまではいいのですがフェードが全く効きません。 いろいろ試したところ$(".thumbnail a img")に変えるとフェードはするのですが今度は画像が 切り変わらなくなってしまいす。両者実装するにはどのように書き換えればいいのでしょうか? $(document).ready(function() { var originSrc = $("#target").attr("src"); $(".thumbnail a") .fadeTo(1,1) .hover( function() { var changeSrc = $(this).attr("href"); $("#target").attr("src", changeSrc); $(this).fadeTo(200, 0.5); }, function() { $("#target").attr("src", originSrc); $(this).fadeTo(500, 1); } ) });

  • jsのスライドショーのボタンの時間制御について

    jsのスライドショーについて質問です。 メイン画像とサムネール画像が連動していて、5秒間で次の画像及びサムネールに自動的にスライドするというものを作りました。そして、Prevボタンやnextボタンをつけ、クリックと、手動で次のスライドに移るようにしました。 これに、切り替わったスライドから5秒間止まり次の画像に切り替わるという設定を加えたいのですが、うまくいきません。自動再生中の4秒後にボタンをクリックすると、次のスライドが1秒で、また次のスライドに切り替わってしまうのです。 どうか方法を教えてください。 <スクリプト> //自動再生 var timerID = setInterval(function(){ $('#thumbsNext').click(); },5000); $('#gallery ul').hover(function(){ clearInterval(timerID); }, function(){ timerID = setInterval(show, 5000); // マウスアウト時にスライドショーを再開 }); function show(){ $('#thumbsInner').animate({ marginLeft:parseInt($('#thumbsInner').css('margin-left'))-248+'px' },'slow','swing', function(){ $('#thumbsInner').css('margin-left','-248px'); $('#thumbsInner ul li:first').appendTo('#thumbsInner ul'); $('#thumbsList .active').next().click(); }); }

  • setTimeoutあるいはsetIntervalの限界

    いつもお世話になっています。 タイマーの実験をしてみようかと思い、タイマー関数のサンプルをちょっと触ってみて、気になることがありました。 スクリプトとしては、次のようなものです。 <HTML> <HEAD> <SCRIPT Language="JavaScript"> <!-- timerID = 10; count = 0; function timerX(){ status = "Counter is " + count++; } function clr(){ clearInterval(timerID); } // --> </SCRIPT> <BODY bgColor="white" onLoad="timerID = setInterval('timerX()',1000);"> (以下略) このスクリプトを実行すると、1秒毎に1カウント増えていきますから、ステータスに表示される数値は10秒で10になります。 ですから、1を指定する、つまりsetInterval('timerX()',1);にすれば、論理上、10秒で10000になるはずですよね? ところが実際にステータスに出る数値はそうはならず、かなり低い数字になってしまいます。 そこで質問なのですが、setTimeoutまたはsetIntervalでタイマーを作る場合、ミリ秒はどのくらいまで有効なのでしょうか。 ひょっとして、マシンに依存するのでまちまちなのでしょうか。 経験等でご存じの方、お教えください。

専門家に質問してみよう