質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

4回答

2459閲覧

処理をループさせたい

hiro421

総合スコア63

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2017/02/02 20:22

###前提・実現したいこと
一定時間で処理をループさせたいです。
下記の内容です。

・6秒後にdivにaddclass("active")
・addclassが実行されてから2秒後にremoveclass("active")

これをループさせたい
(6秒+2秒だから8秒?)

###発生している問題・エラーメッセージ
色々調べて下記コードを書いてみたのですが、上手くいきませんでした。。。

###該当のソースコード

javascript

1setInterval(function(){ 2 setTimeout(function(){ 3 $("div").addClass("active"); 4 },6000); 5 if($("div").hasClass('active')){ 6 setTimeout(function(){ 7 $("div").addClass("active"); 8 },2000); 9 } 10 },8000);

このような場合、どのように記述すればよいのでしょうか。。
ご教授いただけますと助かります!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

setIntervalを使うより、setTimeoutを連鎖させるほうがいいかもしれません。

javascript

1function add(){ 2 $("div").addClass("active"); 3 setTimeout(remove, 2000); 4} 5 6function remove(){ 7 $("div").removeClass("active"); 8 setTimeout(add, 6000); 9} 10 11add();

投稿2017/02/02 22:58

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hikochang

2017/02/05 15:46

これって8秒のインターバル守れますか?誤差が蓄積しそうな気がします。
guest

0

6秒+2秒なら1秒でカウンタを回し、
カウンタを8で割ったあまりが6のときに前者、
あまり0のときに後者を実行(ただしカウンタが0の時を除く)
すればいいのでは?

javascript

1<script> 2var count=0; 3var timer=setInterval(function(){ 4 count++; 5 document.getElementById('d1').value++; 6 if(count%8==6 )document.getElementById('d2').value++; 7 if(count%8==0 )document.getElementById('d3').value++; 8},1000); 9</script> 10<input type="text" id="d1" value="0"><br> 11<input type="text" id="d2" value="0"><br> 12<input type="text" id="d3" value="0"><br> 13

投稿2017/02/03 02:07

編集2017/02/03 02:11
yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

せっかくjQuery使ってることですし、こんなんはどうでしょうか?

JavaScript

1setInterval(function(){ 2 $.when( 3 $("#testDiv").delay(6000).addClass("active") 4 ).then(function(){ 5 $("#testDiv").delay(2000).removeClass("active") 6 }); 7},8000);

投稿2017/02/03 05:57

編集2017/02/03 05:58
satoshi_tajima

総合スコア337

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

setTimeoutブロックされないので今の処理だとif文がtrueになる事が無いと思います。
タイマーを繋げる方法だと誤差が蓄積していくので、インターバルを使いたいと言う事であれば、以下の方法も有ります。

JavaScript

1setInterval(function(){ 2 setTimeout(function(){ 3 $("div").addClass("active"); 4 },6000); 5 setTimeout(function(){ 6 $("div").removeclass("active"); 7 },8000); 8 },8000);

投稿2017/02/02 23:19

編集2017/02/05 15:43
hikochang

総合スコア648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問