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

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

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

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

jQuery

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

Q&A

解決済

1回答

4149閲覧

jQueryで複数のセレクタを設定したら、addClassとremoveClassの挙動がおかしくなる。

shohei77

総合スコア33

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2019/02/16 10:28

編集2019/02/16 11:26

以下のようにセレクタを1つにした場合は正常に動作するのですが、

js

1$(".animated").each(function(){ 2$(this).addClass("fade-in-bottom");

以下のようにセレクタを複数にしたら、挙動がおかしくなりました。
if文の中の書き方がおかしいのでしょうか?
jsが初心者なので、解決策が見つかりません。
解決方法を教えていただけると幸いです。

<▼追記ここから▼>
<現象>
スクロールして、最初から中盤くらいの画像が表示されないのですが、
最後の方になると正常に画像がアニメーション表示される。
スクロールを上に戻すと、全て消えてしまいます。
※最後の方になると正常に動作している模様です。

▼スクロールが一番下の状態だと、全て正常にクラスが付いている
イメージ説明

スクロール中、デベロッパーツールで上記の画像箇所を確認したところ、
・fade-in-bottomのクラスが付いた瞬間に消えたり
・fade-in-leftのクラスが付いた瞬間に消えたり
・または、全くクラスが付かない
そんな現象がおきています。

※デベロッパーツールでエラーは出ておりませんでした。
<▲追記ここまで▲>

js

1<script type="text/javascript"> 2$(function(){ 3 $(window).scroll(function (){ 4 $(".animated , .animated01").each(function(){ 5 var imgPos = $(this).offset().top; 6 var scroll = $(window).scrollTop(); 7 var windowHeight = $(window).height(); 8 if (scroll > imgPos - windowHeight){ 9 $(".animated").addClass("fade-in-bottom"); 10 $(".animated01").addClass("fade-in-left"); 11 } else { 12 $(".animated").removeClass("fade-in-bottom"); 13 $(".animated01").removeClass("fade-in-left"); 14 } 15 }); 16 }); 17}); 18</script>

html

1<div> 2 <div class="animated"><img src="" alt=""></div> 3 <div class="animated01"><img src="" alt=""></div> 4 <div class="animated"><img src="" alt=""></div> 5 <div class="animated01"><img src="" alt=""></div> 6 <div class="animated"><img src="" alt=""></div> 7 <div class="animated01"><img src="" alt=""></div> 8 <div class="animated"><img src="" alt=""></div> 9 <div class="animated01"><img src="" alt=""></div> 10 <div class="animated"><img src="" alt=""></div> 11 <div class="animated01"><img src="" alt=""></div> 12 <div class="animated"><img src="" alt=""></div> 13 <div class="animated01"><img src="" alt=""></div> 14 <div class="animated"><img src="" alt=""></div> 15 <div class="animated01"><img src="" alt=""></div> 16</div>

css

1.animated, 2.animated01 { 3 opacity: 0; 4} 5 6.fade-in-bottom { 7 opacity: 1; 8 -webkit-animation: fade-in-bottom 1s cubic-bezier(0.390, 0.575, 0.565, 1.000) both; 9 animation: fade-in-bottom 1s cubic-bezier(0.390, 0.575, 0.565, 1.000) both; 10} 11@-webkit-keyframes fade-in-bottom { 12 0% { 13 -webkit-transform: translateY(100px); 14 transform: translateY(100px); 15 opacity: 0; 16 } 17 100% { 18 -webkit-transform: translateY(0); 19 transform: translateY(0); 20 opacity: 1; 21 } 22} 23@keyframes fade-in-bottom { 24 0% { 25 -webkit-transform: translateY(100px); 26 transform: translateY(100px); 27 opacity: 0; 28 } 29 100% { 30 -webkit-transform: translateY(0); 31 transform: translateY(0); 32 opacity: 1; 33 } 34} 35 36.fade-in-left { 37 opacity: 1; 38 -webkit-animation: fade-in-left 1.5s cubic-bezier(0.390, 0.575, 0.565, 1.000) 1.5s both; 39 animation: fade-in-left 1.5s cubic-bezier(0.390, 0.575, 0.565, 1.000) 1.5s both; 40} 41@-webkit-keyframes fade-in-left { 42 0% { 43 -webkit-transform: translateX(-100px); 44 transform: translateX(-100px); 45 opacity: 0; 46 } 47 100% { 48 -webkit-transform: translateX(0); 49 transform: translateX(0); 50 opacity: 1; 51 } 52} 53@keyframes fade-in-left { 54 0% { 55 -webkit-transform: translateX(-100px); 56 transform: translateX(-100px); 57 opacity: 0; 58 } 59 100% { 60 -webkit-transform: translateX(0); 61 transform: translateX(0); 62 opacity: 1; 63 } 64}

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

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

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

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

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

m.ts10806

2019/02/16 10:31

現象は具体的に書いてください。 目指す動作もきちんと書かれないと的確な回答につながりませんので。
kei344

2019/02/16 10:32

「挙動がおかしく」とは「何をしたときに」「どうなると思って」「どうなったのか」を、出ているエラーなどと併せて、具体的に記述されたほうが回答を得られやすいと思います。
shohei77

2019/02/16 11:27

ご連絡ありがとうございます。 現象を追記いたしました。 ご確認よろしくお願い致します。
guest

回答1

0

ベストアンサー

下記場所で、.animated .animated01全てにクラスを付与/削除しているので、eachで最後に実行される物のみが適用されます。

js

1 if (scroll > imgPos - windowHeight){ 2 $(".animated").addClass("fade-in-bottom"); 3 $(".animated01").addClass("fade-in-left"); 4 } else { 5 $(".animated").removeClass("fade-in-bottom"); 6 $(".animated01").removeClass("fade-in-left"); 7 }

なので、たとえばこう。

js

1 var flag = $(this).hasClass('animated') ? 'fade-in-bottom' : 'fade-in-left'; 2 if (scroll > imgPos - windowHeight){ 3 $(this).addClass(flag); 4 } else { 5 $(this).removeClass(flag); 6 } 7```**動くサンプル:**[https://jsfiddle.net/7zftar32/](https://jsfiddle.net/7zftar32/)

投稿2019/02/16 11:43

kei344

総合スコア69407

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

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

shohei77

2019/02/17 04:23

直りました! 動くサンプルまで作成いただきありがとうございます! 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問