- ベストアンサー
スライドショー再開ボタンの連打で動作がおかしくなる問題
- スライドショー再開ボタンを連打すると、スライドショーが超高速で動き続けてしまう問題が発生しています。
- 実務ではこの問題に対処する必要はありません。
- 連打をしても問題が発生しないようにする方法はありません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
再開ボタンをクリックする度にsetIntervalによるタイマーが生成されるため、 複数のタイマーがそれぞれ稼動している状態になります。 そのため、各タイマーがそれぞれのタイミングでchangePage()を呼び出すため、 スライドが高速で動いているものと思われます。 連打をしても動かないようにする方法は、 タイマーを起動の状態を変数で管理するのがよいかと思います。 例: var isStart = false; $('#js-play-btn').click(function() { if (isStart == false) { startTimer(); isStart = true; } }); > 実務ではそこまで対処する必要はありますか? > そこまでする人はふつういないので、このような場合は製作者側の問題でないといってもよいのでしょうか? あたなの会社の方針次第です。 私なら開発者として恥ずかしいので修正します。
その他の回答 (1)
isStartはご自身で適切な場所に配置してください。 タイマーを稼動する際に呼び出す関数のなかでtrueを、 タイマーを停止する際に呼び出す関数のなかでfalseを設定されれば良いかと思います。 「連打するととてつもないスピードで変更する」 こちらの原因については理解、および確認をされたのでしょうか? 原因を理解されていないと、修正内容についても理解できないのではないでしょうか? ChromeのDeveloper Tools(F12キーで表示)等を使って、 実際にどのような動きをしているのか、確認された方が良いかと思います。 JavascriptのChromeでのデバッグ方法 http://qiita.com/snoguchi/items/8f6bb62a3166eca23ac3
お礼
ありがたいです。 //停止した場合の再開ボタンのJS $('#js-play-btn').click(function() { startTimer(); }); /* /オプションを足す場合はここへ記載 */ var isStart = false; $('#js-play-btn').click(function() { if (isStart == false) { startTimer(); isStart = true; } }); としましたがやはり連打するととてつもないスピードで変更するようになります。 こちらは'#js-play-btnをクリックしたときにisStart がfalseだったらタイマーを再開して、turueにfalseを変更するということをやっているのでしょうか? ただisStartという変数や内容はここで定義するまえには存在しないものですよね。 この中身がtrueかfalseかはどこで決まっているのでしょうか? またfalseが停止中の時で、trueが再生中を示しているのでしょうか? これは仕様で決まっているのですか?