• 締切済み

スライドショーなどずっと繰り返す処理

https://okwave.jp/qa/q9339175.html の続き スライドショーなどずっと繰り返す処理ってよくありますよね。 その様な場合配列のインデクス番号を初期化してやらないと、一度画像を回って最後のがぞうで止まってしまうと思うのですが、 また繰り返すためにはどうすればいいのでしょうか? 初期化すると必然的に無限ループになりませんか? 教えていただけませんでしょうか?

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.4

私が >無限ループにしないと繰り返しませんけど・・・ と書いたのは >初期化すると必然的に無限ループになりませんか? を受けての話です(そうなっていますよね)。インデックスの値を増分していって、最大値を超えたら初期値に戻すので「無限ループ」はします。それはあくまでもJavaScript全体の処理としてそういうロジックになるということです。 質問者さんは最大値で終了せずに初期値に戻したら無限ループになりませんか?と心配されていましたよね。この時点でsetTImeoutで繰り返す処理というのが大前提であって、forで回すという話ではなかったハズです。でないと >https://okwave.jp/qa/q9339175.html >の続き にはなりませんし、タイトルの「スライドショーなどずっと繰り返す処理 」にも該当しません。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

質問者さんが提示されたソースでは、loop()の呼び出しは4秒間隔ですがloop()の中で無限ループしています。最初に呼び出された時点でフリーズします。 『繰り返す』というのは、loop()を4秒間隔で呼び出す処理を無限ループさせる(インデックスが最大値を超えたら最小値に戻す)という話です。なのでloop()では今現在のインデックス値のデータを処理してからインデックスに+1(最大値を超えていたら最小値をセット)して、次の呼び出しをsetTImeoutで指定するだけです。loop()の中ではループ処理は不要です。

htmlcss123
質問者

お礼

forがなくてもsetIntervalなどで繰り返し処理が出来るのでforがいらないという事でしょうか? forで無限ループを作るとfor事態に時間指定はできないので、これを一回でも実行してしまうと無限ループを指定しない時間の間に行てしまうので、フリーズするという事ですかね? 無限ループにしないと繰り返しませんけど・・・ と言っていたけど...

htmlcss123
質問者

補足

https://codepen.io/anon/pen/zzqjKg このように変更しましたが確かにループはしなくなりました、 これでちゃんと繰り返し処理のループになっており同じことが出来るのでしょうか?

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>このようにしたのですがフリーズするのは何故でしょう? forループの中ではほぼ何もしていませんよね。無限ループでこんなものを実行すれば応答不能になるのが当然です。実行する処理(一定の時間待ちがある)をする前提で「繰り返す」べきです。 カウンタ初期化 while (1) { // 無条件繰り返し カウンタに従った処理 処理の待ち合わせ カウントアップ カウンタが要素数以上になったら初期化 } 他の言語だと処理の待ち合わせ(sleep とか wait)で調整しますが、JavaScriptはsetTimeoutで再呼び出しなんですかね。 書くとすれば i = 0; setTimeout(loop(), 4000); function loop() { // i を使った処理(最初は 0) i++; if (i >= arrayItem.length) { i = 0; } setTimeout(loop(), 4000); } でしょうか(変数のスコープなどは適宜合わせてください)。

htmlcss123
質問者

お礼

setTimeout(loop(), 9000); // loop(); 上記のように作った関数の呼び出しを9秒ごとにしたのですがそれでもフリーズします。

htmlcss123
質問者

補足

これはloop関数全体の処理を9秒間で一回行え、終わらせろという事ですよね。 setTimeout(loop(), 9000); これはloop関数全体の処理を可能な限り早く行ない続けろという事ですよね。 loop(); ただこちらも自分自身を呼び出す部分を4秒後にしているのでフリーズしないと思ったのですが、 なぜするのでしょうか?

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>また繰り返すためにはどうすればいいのでしょうか? インデックス用のカウンタが要素数を超えたら最初の値に戻す・・ということをやります。 >初期化すると必然的に無限ループになりませんか? 無限ループにしないと繰り返しませんけど・・・

htmlcss123
質問者

お礼

https://codepen.io/anon/pen/zzqjKg なのでこのようにしたのですがフリーズするのは何故でしょう?

htmlcss123
質問者

補足

ncaught RangeError: Maximum call stack size exceeded 変更後によってブラウザはフリーズしなくなりましたが、まだスタックオーバーフローとでてきて、ちゃんと動きません。 forをなくしてもまだループ処理によって問題が起きているのでしょうか?

関連するQ&A

  • 再開ボタンを連打するとずっとスライドショーが変

    http://okwave.jp/qa/q9260560.html のつづき //停止した場合の再開ボタンのJS $('#js-play-btn').click(function() { startTimer(); }); 上記でスライドショーを再開することには成功したのですが 再開ボタンを連打するとずっとスライドショーが超高速で動き続けるという、BAGU?が起きます。 実務ではそこまで対処する必要はありますか? そこまでする人はふつういないので、このような場合は製作者側の問題でないといってもよいのでしょうか? もし連打をしてもおかしくならないような方法があれば教えてください。

  • jQueryでスライドショー作成(無限ループ)

    jQueryでスライドショーを作成したいです。 仕様としては、進むボタンと戻るボタンがあって、どちらかを押すと、画像が前または後ろにスライドして変わります。 ここまではできるんですが、以下のような無限にループさせることができません。 ・最後まで行ったときに、進むボタンを押すと、最初の画像が右から現れてスライドし、最初に戻る。 ・最初の画像のときに戻るボタンを押すと、最後の画像が左から現れてスライドし、現在地が最後の画像になる。 具体的には、下記サイトのような挙動にしたいです。 http://www.slidesjs.com/ このようなスライドショーの無限ループは、どのように考えれば実現できるのか、どなたかご教授いただけないでしょうか?

  • 複数の自動スライドショー(jQuery)の設置方法

    前回の質問の http://okwave.jp/qa/q6602248.html の続きです。 今1つだけ設置している自動スライドショーを、 2つ、3つと同HTML内に増やしていきたいのですが、参考にした http://spaceforaname.com/filmstrip.html こちらのサイトをみて $('#photos').galleryView({ の部分や他にも共通するjs内の部分の名前を $('#photos').galleryView2({ などに変更してみたのですが、いっこうに動いてくれません。 どのようにしたらこの自動スライドショーを複数設置することができるのでしょうか? この自動スライドショー以外に似たようなものを探しましたが、 リンクができ、尚かつ各々の写真の下に文章を入れることができるという形の物が見つからず・・・。 非常に困っております。 どうかご回答お願い致します。

  • Javascript使用のスライドショーのリンク

    Javascriptを使用したスライドショー(http://myisland.jp/template/gallery/gallery04.html )の画像にリンクを付けることはこちら→(http://okwave.jp/qa/q6066267.html)の質問を元にできましたが、別ウィンドウで表示する方法が分かりません。どなたかお分かりでしょうか?Dreamweaver8で製作しております。

  • スライドショー

    imagesディレクトリにGIFとJPGという拡張子のちがう画像が混在して います。ファイル名は連番です。 これらの画像をスライドショーで表示するとき、ファイルを読みに行 ったときに、自動的に判別して表示させるにはどうしたらよいでしょ うか。番号で切り分けずに、 for(var i=0;i<30;i++) というループで実現したいです。 よろしくお願いします。

  • スライドショーを自動ループにしたい

    サムネイルつきのスライドショーを作りたいと思っています。 本当はページを開けたら自動的にスライドショーがはじまるのが理想なのですが、ボタンを押してスライドショー開始でもよく、サムネイルの画像をクリックすると、またそこからはじまるようにしたいです。 参考にしているHPが http://himajin.moo.jp/freejava/imgchange/imgview3.html なのですが、チェックボックスを入れたくありません。自動でエンドレスループしてほしいです。 どうやってはずしたらいいのでしょうか? 色々試してみましたが、動かなくなってしまいます。 それとボタンを<input type="button">になってるのをjpg画像のボタンにしたかったのですが、これも変えるのがうまくいきません。 ボタンを変えることは可能でしょうか? おしえてください。 よろしくお願いします。

  • Windows 10 のスライドショーが動きません

    Windows 10 で、 壁紙をスライドショーに設定してもスライドしません。 設定 > 背景 背景: スライドショー スライドショーのアルバムを選ぶ: 任意 画像の切り替え間隔: 任意 シャッフル: 任意 調整方法を選ぶ: 任意 設定をなんどか変更しましたが、 全く改善されませんでした。 壁紙じたいは表示されますが、 スライドしません。 一生同じ壁紙が表示され続けます。 インターネットで原因を調査しましたが、 にほんの全インターネットに解決策が記述されていないことを確認済みです。 なお、 私は Windows 10 をリリース直後から しようし続けていますが、 壁紙のスライドショーをしようするのは 今回が はじめてです。 つまり、 私以外の人でも、 私と同じ不具合が内在している可能性は充分にあります。 私と同じ不具合の人がいるのかどうか、 また、 日本語圏いがいのインターネットでは解決策が かかれているのか、 を確認したいので質問させていただきます。 よろしく お願い致します。 環境: Windows 10 Home 64bit ************************************************** 注意: OKWave の不具合により、いかのエラーのため返答できませんが、全部の回答を見ています。 ---------------------------------------- この操作は実行できません。 再度ログインをお試しいただき、改めて操作手順をご確認ください。 問題が解決しない場合は、FAQを御確認のうえ、お問い合わせください。 ---------------------------------------- この不具合について OKWave 管理者に問い合わせても、嘘の返答があるだけなので無駄です。 http://okwave.jp/qa/q9226301.html

  • Flash マスクを使ったループスライドショー

    下記サイトのように、マスクを使ったループスライドショーを作っているのですが行き詰まっています。 http://www.taiza.jp/ やりたいことは、 外部の用意した「photo1.jpg」「photo2.jpg」「photo3.jpg」「photo4.jpg」の4枚画像を参考サイトのように下から上へと動くマスクを使ってループさせたいことです。その際、下に隠れているjpgが少し上へうごくこともやりたいです。 ループさせなければ、loadMovie("photo●.jpg", "ターゲットMC");とレイヤーのマスクを使ってできたのですが、 ループさせるとなると「photo4.jpg」から「photo1.jpg」・・・との繋ぎ方がわかりません。 このようなスライドショーを作りにはどうしたらよいのでしょうか。教えてください。 環境は、Flash CS3 Actionscript2.0 です。

    • ベストアンサー
    • Flash
  • パワーポイント2007で、スライドショー中にスライドの編集をしたいので

    パワーポイント2007で、スライドショー中にスライドの編集をしたいのですが。 こんにちは。あした、パワーポイント2007でスライドショーをやるんですが、みんなからの意見をパワーポイントでその場ですぐに入力し、スクリーンにプロジェクターで映したいのですが、やり方がわかりません。 スライドショーをせずに編集は普通にできるのですが、表示される領域が少ないので困っています。また、中学校ですので、ディスプレイを2つ使ったりとかはできません。 自分で調べた結果、http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1124075006 という、質問があって、その、ベストアンサーの中に、 ●テキスト編集  という項目がありました。そこに、やり方が書いてあるのですが、そのやり方で正しいのでしょうか? EnterKeyBehavior:True とか、MultiLine: Trueって、エクセルの設定ではなかったでしょうか? このやり方について、できるだけ詳しく教えていただきたいと思います。(例えば、正しいor正しくない。など。)また、もし違うのであれば、違うやり方を教えていただきたいと思います。 図々しいと思いますが、できるだけお早めに、ご回答ください。よろしくお願いします。

  • JQueryでサムネ付スライドショークロスフェード

    JQueryでクリックを使用せず、自動クロスフェードのサムネイル付きスライドショー&マウスオーバーでもクロスフェードで切り替わるようにするためにはどうすればよいでしょうか? 更にはスライドショーにキャプションがつけられたら最高です。 スライドショーの幅はwidth: 354px; height: 280px;、サムネイルはその下に縦3つ、横3つの計9つ配置します。 スライドショーは自動フォロスフェードによるループ、またサムネイルをマウスオーバーでもその画像にクロスフェードイン、その際スライドショー内に表示されている&マウスオーバーされているサムネイルの画像は罫で仕切るか、半透明がクリアに表示されるといった処理を考えております。 恥ずかしながら調べても分からなかったので、皆さまの知識を拝借したく投稿させて頂きました。 恐れ入りますが、何卒ご助言下さいますよう、よろしくお願い致します。

専門家に質問してみよう