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

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

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

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

jQuery

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

Q&A

解決済

1回答

4659閲覧

jQueryで上から降りてくるヘッダーメニューの、コードの意味を教えてください。

hiro..

総合スコア79

CSS3

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

jQuery

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

0グッド

0クリップ

投稿2020/03/16 11:31

お世話になっております。

jQueryでclassをつけはずしすることによって上からするっと降りてくるヘッダーについて、質問させてください。

codepen

コードは以下のようになっています。

html

1 <header id="header" class="js-float-header"> 2 ヘッダー 3</header><!-- /header --> 4<main> 5 <section class="section section1"></section> 6 <section class="section section2"></section> 7 <section class="section section3"></section> 8</main> 9 10 <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script> 11

css

1#header { 2 background: pink; 3 position: absolute; 4 top: 0; 5 left: 0; 6 height: 100px; 7 width: 100%; 8 transition: none; 9 z-index: 100; 10 background: pink; 11/* この↓transitionを付けたいけど付けるとカクつく */ 12/* transition: transform .5s; */ 13} 14#header.standby { 15 position: fixed; 16 transform: translateY(-100%); 17} 18 19#header.fixed { 20 transform: translateY( 0 ); 21 box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.07); 22} 23 24.section { 25 height: 400px; 26} 27.section1 { 28 background: #ccc; 29} 30.section2 { 31 background: #ddd; 32} 33.section3 { 34 background: #fff; 35}

jQery

1 // ヘッダー固定切り替え 2var $header = jQuery('.js-float-header'); 3 //外部の高さをとる 4var headerH = $header.outerHeight(); 5 //ブラウザウィンドウの外側の幅 6var overplus = jQuery(window).outerWidth() * 0.1; 7jQuery(window).on('scroll', function() { 8 if (jQuery(window).scrollTop() > headerH + overplus) { 9 // ヘッダーfixed時 10 $header.css({ 'transition': 'transform .5s' }); 11 $header.addClass('standby').addClass('fixed'); 12 } else if (jQuery(window).scrollTop() > headerH) { 13 // ヘッダーstandby時 14 if ($header.hasClass('standby')) { 15 $header.css({ 'transition': 'transform .5s' }); 16 } else { 17 $header.css({ 'transition': '' }); 18 } 19 $header.addClass('standby').removeClass('fixed'); 20 } else { 21 // ヘッダーabsolute時 22 $header.css({ 'transition': '' }); 23 $header.removeClass('standby fixed'); 24 } 25 }); 26

上記コードで問題なくヘッダーは動作するのですが、
クリックでスライドするパーツとの兼ね合いで
どうしても #header に transition: transform .5s; を付与したいのです。

ですが、それをするとヘッダーの動きにカクつきが出てしまいます。

ヘッダーがカクつくのは

jQuery

1 else if (jQuery(window).scrollTop() > headerH) { 2// ヘッダーstandby時 3 if ($header.hasClass('standby')) { 4 $header.css({ 'transition': 'transform .5s' }); 5 } else { 6 $header.css({ 'transition': '' }); 7 } 8 $header.addClass('standby').removeClass('fixed'); 9 }

の部分なので、この部分をどうにかしたら #header に transition: transform .5s; を付与したまま
ヘッダーの動きを正常にできるのかな・・・と考えているのですが、

このコードの意味をきちんと理解していないためどこを触っても挙動がおかしくなってしまいます。

1:ページロード時はclassの付与・transition無し

2:ヘッダーの高さよりスクロールすると
.standby を持っていれば transition を付与
.standby を持ってなければ transition を消す
それに関わらず.standbyを付与、.fixedを消す

3:さらにスクロールすると
.standby .fixed transitionも付与

というところまでは理解しました(合っているが自信がありませんが・・・)。

前置きが長くなりましたが、
transitionをこんなにこまかく付け外しするのは何故でしょうか。

jQuery

1else { 2 $header.css({ 'transition': '' }); 3 }

の部分を削除してもヘッダーはちゃんとスライドダウンしますが、#header に transition を付けると
やはりカクついてしまいます。

上記jQueryのコードでやっていることの意味を教えていただけませんでしょうか。

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

意味を教えるという言葉が漠然としているので正確に誰も教えることはできません。
全ての行にコメント付きで解説を求める等、手取り足取り教えてほしいという意味でしたら、かなりの労力を回答者にかけようとしていることを理解してください。
コードの意味をきちんと理解していないのであれば、まず、理解する為にリファレンスを読んでそこでわからない箇所を質問してください。

これはアドバイスであって回答ではないかもしれませんが、下記のようにコードの要所に出てくる変数等をわかりやすく視覚化するのはコードを理解するのに役立つことです。(console.logなども調べてください。)
codepen

投稿2020/03/16 23:27

編集2020/03/17 00:26
makosankibu

総合スコア289

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

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

hiro..

2020/03/17 00:17

色々アドバイスいただき、ありがとうございます。 codepenのモニターの数値を拝見して、自分がコードの内容で勘違いしている点を発見することができました。 質問をだらだらと長く書いてしまったのですが、 // ヘッダーstandby時 if ($header.hasClass('standby')) { $header.css({ 'transition': 'transform .5s' }); } else { $header.css({ 'transition': '' }); } $header.addClass('standby').removeClass('fixed'); } の部分で、短いstandbyの間にtransitionを付け外しする意味はなんなのかという ものでした。 漠然と、慣れてる方が見れば当たり前な記述なのかな?と思って質問してしまい、 回答者の方に不要な労力をかける意図はありません。 ですがそういうご指摘をいただいても仕方ない質問だなーと改めて読み返してみて、感じました^^; いただいたアドバイスに従おうと思います。 コメントありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問