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

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

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

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

Q&A

解決済

1回答

2241閲覧

eachと$(window).scrollについて

1mlolololm1

総合スコア7

jQuery

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

0グッド

1クリップ

投稿2018/04/14 18:15

編集2018/04/15 08:56

■前提・実現したいこと

ある特定のクラス(.anime-item)に別のクラス(.addAnime)を追加するタイミングを条件分岐させたいです。

▼はじめの分岐:そのクラスが画面内にあるかどうか
(ある場合):クラスを追加(.addAnime)
(ない場合)→次の分岐

▼2番目の分岐:画面内に入ってきた特定のタイミングでクラスを追加(.addAnime)

該当のソースコード

jQuery

1$(function() { 2 $('.anime-item').each(function() { 3   var itemPos = $(this).offset().top; 4 var scTop = $(window).scrollTop(); 5 var winH = $(window).height(); 6 var itemDis = itemPos - scTop; 7 var split = 35; 8 9 if ( 0 <= itemDis && itemDis <= winH ) { 10 $(this).addClass('addAnime'); 11 } else { 12 $(window).scroll(function () { 13 var scTop = $(window).scrollTop(); 14 15 if (scTop > itemPos - winH + winH/split) { 16 $(this).addClass('addAnime2'); //本当は同じaddAnimeを追加したい 17 } 18 }); 19 } 20 }); 21});

### ■つまづいてるところ
eachの中に、$(window).scroll(function () {});をいれて、更にif分岐をさせたら
うまく機能してないようで、addClass2の方が追加されませんでした。(else以降が機能していない?)
ちなみに、上記のコードでは、はじめの分岐とあとの違うタイミングでクラスが追加されていることがわかるように、
addAnime2としていますが、最終的には一つのクラスで管理したいと考えています。

### ■補足

jQuery自体を使う際は、普段ほとんどコピーが多く実際書いて使う機会があまりないのですが、
実現したいことがあり調べながら試してみたのですが、つまづいています。

宜しくお願いします。

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

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

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

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

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

Lulucom

2018/04/14 22:10 編集

> つまづいています どこでどうつまづいているかを具体的に書いて ソースコードも整形してくれる機能がありますので使うと 回答が得られ易いのではないかと思います。 質問のフォーマットに従って書くと良いのではないかと。
1mlolololm1

2018/04/15 00:31

ご指摘ありがとうございます。コードの整形とつまづいているところを追加してみました。
Lulucom

2018/04/15 00:47 編集

ありがとうございます。2箇所の addClass がどちらもうまく機能しなくなった、ということでしょうか。
1mlolololm1

2018/04/15 08:34

上記コードは、機能してる個所を特定したかったため、片方は、addAnimeもう一方は、addAnime2というクラスを追加しているのですが、addAnime2の方(つまり、else以降)が機能していないようです。
Lulucom

2018/04/15 08:39

ありがとうございます。「addAnime2の方(つまり、else以降)が機能していない」というのを質問から読み取れませんでしたので、明記された方が良いと思います。
1mlolololm1

2018/04/15 08:54

上記記載しました。わかりづらい説明で申し訳ありません。。。よろしくおねがいします。
guest

回答1

0

ベストアンサー

js

1$(this).addClass('addAnime2'); //本当は同じaddAnimeを追加したい

上の this が対象要素を指していないためかと思います。
別の function 内にあるため、別のオブジェクトを指しています。

以下のように function 外から変数で渡せば参照できます。

js

1 } else { 2 var $item = $(this); // 変数に入れる 3 $(window).scroll(function () { 4 var scTop = $(window).scrollTop(); 5 6 if (scTop > itemPos - winH + winH/split) { 7 $item.addClass('addAnime2'); // 変数を参照する 8 } 9 }); 10 }

投稿2018/04/15 09:31

Lulucom

総合スコア1899

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

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

1mlolololm1

2018/04/15 21:37

おっしゃる通りでした!上記のように外から変数で渡せば意図通りに通りに動きました。 大変勉強になりました。ありがとうございました!
Lulucom

2018/04/15 23:30

良かったです。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問