🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

Q&A

解決済

1回答

4029閲覧

スクロールするたびにスティッキーヘッダーがガタガタしてしますのを直したい

退会済みユーザー

退会済みユーザー

総合スコア0

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2019/12/17 04:05

編集2019/12/17 23:27

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード <main> </main> <footer> <ul> <li>aa</li> <li>aa</li> <li>aa</li> <li>aa</li> </ul> </footer> <script> 'use strict'; $(function() { $(window).on('scroll', function() { if ($(window).scrollTop() > $('ul').offset().top) { $('ul').addClass('a'); } else { $('ul').removeClass('a'); } }); }); </script> ul.a { background: red; position: fixed; top: 0; width: 100%; } main { background: #333; width: 100%; height: 2000px; }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

miyabi_takatsuk

2019/12/17 05:05

何点か。 ・どこにstickyを効かせているのでしょうか? fixedしかお見受けできません。 ・質問はタイトルだけでなく、本文に詳細な内容を記載ください。 ・ブラウザは何か記載してください。 ・コードは他人でも再現できるコードにしてください。 質問本文は、編集可能なので、 この質問にて修正をお願いします。
退会済みユーザー

退会済みユーザー

2019/12/17 07:51

スクロールするたびに固定したヘッダーの挙動がおかしくなりガタガタとブレてしまいます。 それを直したいのですが、やり方がわからず困っています。 スティッキーではなく固定ヘッダーです。 ブラウザはGoogleCroomです。
miyabi_takatsuk

2019/12/17 08:00 編集

わかりました。 スティッキーヘッダーだと、やりたいことを勘違いされるかもなので、 (position: sticky使えばいいじゃんって思われる)タイトル変えた方がいいかもですね。 ちなみに、position: stickyを使わない理由はなんでしょうか? クロスブラウジングを考慮して、ということでしょうか? (それによって回答変わります)
退会済みユーザー

退会済みユーザー

2019/12/17 08:04

以後気をつけます。 jqueryでの実装方法を勉強したいからです。 もしよろしければ教えていただきたく思います。
miyabi_takatsuk

2019/12/17 08:06

なるほど! 学習のためってわけですね。 御助力できるかわかりませんが、回答させていただきますね。
miyabi_takatsuk

2019/12/17 08:57

あと、質問は編集できるので、以後ではなく、この質問から気をつけましょう。 ちなみに、javadocは、Javaによるものなので、この質問での適切なタグは、 JavaScript、jQueryだと思われます。 タグも、質問編集で変えれますので、変えときましょう。
guest

回答1

0

ベストアンサー

position: fixed時に、$('ul').offset().top0になるのが原因です。
なので、初期値のoffset.topを予め定義し、それを条件に使うといいでしょう。
また、クラスを持っている時にremoveClass、持っていなかったらaddClassさせるという条件も一応つけときました。

javascript

1'use strict'; 2 3$(function() { 4 // 最初に初期のoffsetを取得しておく 5 const ulOffset = $('ul').offset().top; 6 7 8 $(window).on('scroll', function() { 9 // この条件が、スクロール量が多いのにfalseになる時がある 10 console.log('top: ', $(window).scrollTop() > $('ul').offset().top); 11 // position: fixedによって、offset.topが変化してしまうため、 12 // removeClassの方が実行される。(ページ上にいるので、offset.topが0になるから) 13 // よって、最初に取得した、初期値のoffset.topを使えばうまくいく 14 if ($(window).scrollTop() > ulOffset && !$('ul').hasClass('a')) { 15 // クラスを持っていない時に追加、とする 16 $('ul').addClass('a'); 17 } else if ($('ul').hasClass('a') && ulOffset > $(window).scrollTop()) { 18 // また、クラスを持っていたら実行する、とする 19 $('ul').removeClass('a'); 20 } 21 }); 22});

投稿2019/12/17 08:34

miyabi_takatsuk

総合スコア9555

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

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

退会済みユーザー

退会済みユーザー

2019/12/17 23:28

ありがとうございます。 指摘いただいた点も変更しておきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問