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

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

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

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

Q&A

解決済

1回答

1418閲覧

Jqueryでスクロールエフェクトが想定した動作をしない

machaking

総合スコア46

jQuery

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

0グッド

0クリップ

投稿2020/02/09 00:39

編集2020/02/09 01:41

下記のJqueryでスクロールエフェクトを複数要素に追加しようとしています。
スクロールして一つ目の要素は問題なく動作するのですが2つ目以降はエフェクト開始位置がズレているのか
だいぶ下の方までスクロールしないと動作しなくなってしまいます。(3つ目はもっと下まで要スクロール)
ズレていることはわかるのですが何が原因でこうなっているのでしょうか?

HTML

1<div class="box scroll-fade"> 2 <div class="pic"> 3 <div class="ex"> 4  <a href="img/season/a.jpg"><img src="img/link/a.jpg" alt="" width="90%"></a> 5 <p class="pagetitle">a</p> 6 <p class="content"></p> 7 </div> 8 </div> 9 <div class="pic"> 10 <div class="ex"> 11 <a href="img/season/b.jpg"><img src="img/link/b.jpg" alt="" width="90%"></a> 12 <p class="pagetitle">b</p> 13 <p class="content"></p> 14 </div> 15 </div> 16</div> 17<p></p> 18<div class="box scroll-fade"> 19 <div class="pic"> 20 <div class="ex"> 21 <a href="img/season/c.jpg"><img src="img/link/c.jpg" alt="" width="90%"></a> 22 <p class="pagetitle">c</p> 23 <p class="content"></p> 24 </div> 25 </div> 26 <div class="pic"> 27 <div class="ex"> 28 <a href="img/season/d.jpg"><img src="img/link/d.jpg" alt="" width="90%"></a> 29 <p class="pagetitle">d</p> 30 <p class="content"></p> 31 </div> 32 </div> 33</div>

CSS

1.pic { 2 display: table-cell; 3 text-align: center; 4} 5 6.pic img { 7 width: 80%; 8} 9 10.ex { 11 width: 80%; 12 margin: -8px auto 100px; 13 height: 250px; 14 background: white; 15} 16 17.box { 18 display: table; 19}

Javascript

1$(function(){ 2 var effect_pos = 300; // 画面下からどの位置でフェードさせるか(px) 3 var effect_move = 50; // どのぐらい要素を動かすか(px) 4 var effect_time = 800; // エフェクトの時間(ms) 1秒なら1000 5 6 // フェードする前のcssを定義 7 $('.scroll-fade').css({ 8 opacity: 0, 9 transform: 'translateY('+ effect_move +'px)', 10 transition: effect_time + 'ms' 11 }); 12 13 // スクロールまたはロードするたびに実行 14 $(window).on('scroll load', function(){ 15 var scroll_top = $(this).scrollTop(); 16 var scroll_btm = scroll_top + $(this).height(); 17 effect_pos = scroll_btm - effect_pos; 18 19 // effect_posがthis_posを超えたとき、エフェクトが発動 20 $('.scroll-fade').each( function() { 21 var this_pos = $(this).offset().top; 22 if ( effect_pos > this_pos ) { 23 $(this).css({ 24 opacity: 1, 25 transform: 'translateY(0)' 26 }); 27 } 28 }); 29 }); 30}); 31

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

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

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

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

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

m.ts10806

2020/02/09 00:43

コードのマークダウンできていませんので質問を編集し ### 該当のソースコード のところをコードと置き換えてください。 またJavaScriptのコードだけではこちらで再現確認とれませんので HTML、CSSもご提示ください
machaking

2020/02/09 01:38

すいませんでした。 修正しました。
guest

回答1

0

ベストアンサー

最初は effect_posの値が300pxになっていますが、スクロールするごとにeffect_posの値が変わってしまうため、スクロールの位置がずれてしまっているのが、原因だと思います。

ですので、

javascript

1var effect_pos_const = 300; // 画面下からどの位置でフェードさせるか(px)固定 2var effect_pos = effect_pos_const // effect_posの値代入用

のような感じで対応させれば指定の位置でスクロールエフェクトが実行できると思います。

念のため、自分の検証用のcodepenも共有いたします。
jQuery スクロールエフェクト検証用

投稿2020/02/09 02:33

jackmiwamiwa

総合スコア395

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

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

machaking

2020/02/09 04:35

ありがとうございました。おっしゃるとおりでした。 要素が一つの場合しか想定されていなかったということですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問