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

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

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

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

Q&A

解決済

1回答

787閲覧

スクロールしてコンテンツが上にきたときに固定したい

banga

総合スコア5

jQuery

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

0グッド

0クリップ

投稿2020/03/02 14:02

スクロールしてテキストがウィンドウのてっぺんにきたときに、それを固定したいのですがコンテンツの位置をうまく取れません。
jqueryでoffsetを使って三つのtext-boxの位置を取得したいのですが二つ目と三つ目のtext-boxの位置がずれてしまいます。

該当のソースコード

jQuery

1$(window).on('load',function(){$(function($) { 2 var fixClass = 'fixed'; 3 var contentsPOS=[]; 4 for(var i=0;i<3;i++){ 5 contentsPOS[i] = $('.text-box').eq(i).offset().top; 6 console.log(contentsPOS[i]); 7 } 8 $(window).on('load scroll resize', function(){ 9 var scrollTop = $(window).scrollTop(); 10 console.log(scrollTop); 11 for(var i=0;i<3;i++){ 12 if (scrollTop>=contentsPOS[i]-50){ 13 $('.text-box').eq(i).addClass(fixClass); 14 } else { 15 $('.text-box').eq(i).removeClass(fixClass); 16 } 17 } 18 }); 19 }); 20 });

css

1.text-box { 2 padding: 50px 25px; 3 width: 480px; 4 background-color: rgba(0,0,0,0.5); 5 color: #fff; 6} 7.text-box .catch { 8 margin: 0 0 10px; 9 font-size: 40px; 10} 11.text-box .copy { 12 margin: 0; 13 line-height: 2; 14} 15 16 /*その他の修正*/ 17h1{ 18 color:white; 19 position:absolute; 20 left:43%; 21 top:50%; 22 font-size: 5vw; 23} 24 25.fixed.text-box{ 26 position:fixed; 27 top:50px; 28 left:0; 29 transform:translate3d(0,0,0); 30} 31

HTML

1 2 3 4 <article> 5 <section id="contents"> 6 <div id="content01" class="contents"> 7 <div id="content01_bg" class="background"></div> 8 <div class="wrap"> 9 10 <div class="titletext"> 11 <h1>Course</h1> 12 </div> 13 14 </div> 15 </div><!-- content01 --> 16 <div id="content02" class="contents"> 17 <div id="content02_bg" class="background"></div> 18 <div class="wrap"> 19 <div class="text-box"> 20 <p class="catch">コンテンツ2</p> 21 <p class="copy">テキスト</p> 22 </div> 23 </div> 24 </div><!-- content02 --> 25 <div id="content03" class="contents"> 26 <div id="content03_bg" class="background"></div> 27 <div class="wrap"> 28 <div class="text-box"> 29 <p class="catch">コンテンツ3</p> 30 <p class="copy">テキスト</p> 31 </div> 32 </div> 33 </div><!-- content03 --> 34 <div id="content04" class="contents"> 35 <div id="content04_bg" class="background"></div> 36 <div class="wrap"> 37 <div class="text-box"> 38 <p class="catch">コンテンツ4</p> 39 <p class="copy">テキスト</p> 40 </div> 41 </div> 42 </div><!-- content04 --> 43 </section> 44 </article> 45 46 </body> 47</html>

試したこと

ページの読み込みが全て終わってからjsを実行すれば改善されるかと思い$(window).on('load',function(){としてみましたが結果はかわりませんでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

「スクロールしてテキストがウィンドウのてっぺんにきたときに、それを固定させるもの」でしたらjQueryではなく、cssの position: sticky;がおすすめです。

position: sticky;の詳しい使い方についてはこちらを参照してください。

https://developer.mozilla.org/ja/docs/Web/CSS/position
https://coliss.com/articles/build-websites/operation/css/css-position-sticky-how-it-really-works.html

また、IEにも対応させたい場合にはPolyfillが必要になるので、こちらを追加してください。
https://github.com/wilddeer/stickyfill

投稿2020/03/02 14:12

jackmiwamiwa

総合スコア395

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

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

banga

2020/03/03 01:55

迅速な回答ありがとうございました。jQueryを使って実装することにとらわれていましたがposition:stickyを使うことで思っていた通りのものが出来ました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問