javascriptでのスクロール時にヘッダーを非表示にする際のパフォーマンスの問題

ジェフリー

次のようなナビゲーションバーを作成しようとしています。

  • 大きな高さから始まります
  • 下にスクロールすると非表示になります
  • 上にスクロールすると縮小バージョンが表示されます
  • 上に完全にスクロールすると、完全な高さになります

これまでのところ、私はうまくいく方法を見つけました。しかし、もっと効率的な方法が必要です。ナビゲーションバーを表示および非表示にする機能があります。また、上部に到達したときに1つの間隔で再び拡大します。私はそれらを組み合わせようとしましたが、いつも失敗しました...ありがとう!

HTML

<!DOCTYPE html>
  <html>
    <head>
      <title>Test</title>
    </head>
    <body>
      <header id="navbar" class="navbar">
        <a href="#home">Home</a>
        <a href="#news">News</a>
        <a href="#contact">Contact</a>
      </header>
    </body>
  </html>

JavaScript

var prevScrollpos = window.pageYOffset;
var shrinkHeader = 200;
function tellMeAStory() {
}

window.onscroll = function() {
  var currentScrollPos = window.pageYOffset;
  if (prevScrollpos > currentScrollPos) {
    document.getElementById("navbar").style.top = "0";
  } else {
    document.getElementById("navbar").style.top = "-200px";
    $('.navbar').addClass('shrink');
  }

  prevScrollpos = currentScrollPos;
}

setInterval(function(){
  var scroll = getCurrentScroll();
   if (scroll < 10){
    $('.navbar').removeClass('shrink');
  } else {}
},250)

function getCurrentScroll() {
    return window.pageYOffset || document.documentElement.scrollTop;
    };

CSS

body {
  margin: 0;
  background-color: #f1f1f1;
  font-family: Arial, Helvetica, sans-serif;
  height: 2000px;
}

header {
  background-color: #333;
  position: fixed;
  top: 0;
  width: 100%;
  display: block;
  transition: all 0.3s;
  height: 200px;
}

.grow{
  height: 200px;
}

.shrink{
  height: 50px;
}

#navbar a {
  float: left;
  display: block;
  color: #f2f2f2;
  text-align: center;
  padding: 15px;
  text-decoration: none;
  font-size: 17px;
}

#navbar a:hover {
  background-color: #ddd;
  color: black;
}

JSFiddle

https://jsfiddle.net/Jimmey/wry54an7/4/

アーメル

これが私がするいくつかの改善です:

  • jQueryを使用してクラスを追加または削除するだけなので、jQueryを削除します。
  • 特にループ内にある場合は、セレクターをキャッシュします。
  • スクロールイベントは高速で発生する可能性があるため、スロットルします
  • setIntervalここで不要な関数を削除します

var prevScrollpos = getCurrentScroll();
var shrinkHeader = 200;
var ticking = false;

// Cache it so you don't have to get it on every scroll event
var navbar = document.getElementById('navbar');

window.addEventListener('scroll', function() {
  var currentScrollPos = getCurrentScroll();

  if (!ticking) {
    window.requestAnimationFrame(function() {
      if (prevScrollpos > currentScrollPos) {
        navbar.style.top = '0';
      } else {
        navbar.style.top = '-200px';
        navbar.classList.add('shrink');
      }

      if (currentScrollPos < 10) {
        navbar.classList.remove('shrink');
      }

      prevScrollpos = currentScrollPos;
      ticking = false;
    });

    ticking = true;
  }
});

function getCurrentScroll() {
  return window.pageYOffset || document.documentElement.scrollTop;
};
body {
  margin: 0;
  background-color: #f1f1f1;
  font-family: Arial, Helvetica, sans-serif;
  height: 2000px;
}

header {
  background-color: #333;
  position: fixed;
  top: 0;
  width: 100%;
  display: block;
  transition: all 0.3s;
  height: 200px;
}

.grow {
  height: 200px;
}

.shrink {
  height: 50px;
}

#navbar a {
  float: left;
  display: block;
  color: #f2f2f2;
  text-align: center;
  padding: 15px;
  text-decoration: none;
  font-size: 17px;
}

#navbar a:hover {
  background-color: #ddd;
  color: black;
}
<header id="navbar" class="navbar">
  <a href="#start">Start</a>
  <a href="#one">One</a>
  <a href="#two">Two</a>
</header>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

パフォーマンスの問題のために結合する際の一時テーブルの使用

分類Dev

パフォーマンスの問題-列ヘッダーに基づいて列を再配置する

分類Dev

スクロールで上部のヘッダーを非表示にする

分類Dev

パフォーマンステストの実行時にプロファイルを挿入する際の問題

分類Dev

フルカラーにスクロールする際の透明なヘッダー-ナビゲーションオーバーレイの問題

分類Dev

RecyclerViewの画像をダウンロードする際のパフォーマンスの問題

分類Dev

ヘッダーグリッドビューのヘッダーを非表示にする際の問題

分類Dev

マーベリック10.9.2に電力線のパッチが適用されたフォントをインストールする際の問題

分類Dev

ファイルのパフォーマンスの問題を同時に圧縮およびダウンロードする

分類Dev

Javascriptのパフォーマンス:スクロールのテーブルヘッダーと列を修正

分類Dev

オブジェクト参照を配列に保存する際のパフォーマンスの問題

分類Dev

リストボックスC#にフォルダ名を追加する際のフォーマットの問題

分類Dev

リモートサーバーを特定のフォルダーにマウントする際のアクセス許可の問題

分類Dev

スクロールバースタイルのオーバーライドに関するAngularVirtualスクロールのパフォーマンスの問題

分類Dev

セル値に基づいてGoogleシートの複数の行を非表示にする-パフォーマンスの問題

分類Dev

Chrome Dev Toolでネットワークのウォーターフォールを使用してWebレンダリングのパフォーマンスの問題を診断するにはどうすればよいですか?

分類Dev

jQueryで動的CSSを追加する際にパフォーマンスの問題はありますか?

分類Dev

ページ上部にヘッダーを表示-スクロールイベントの再起動の問題

分類Dev

Regd:ODACを介してOracleサーバーに接続する際のパフォーマンスの問題

分類Dev

コンボボックスフィールドのレンダラーにストレージをロードする際の問題

分類Dev

Laravel5.1でメールを送信する際のパフォーマンスの問題

分類Dev

WebアプリケーションがDocumentRootの外部のフォルダーにアクセスできるようにApacheを構成する際の問題

分類Dev

スクロール時にヘッダーの色を変更するJavaScript

分類Dev

ループパフォーマンスの問題に対するパンダのリサンプリング

分類Dev

ビューページャーのrecyclerviewに大きなデータをロードする際のパフォーマンスの問題

分類Dev

Oracleテーブルのレコードを更新する際のEntityFrameworkのパフォーマンスの問題

分類Dev

フラグメント内の折りたたみツールバーがスクロール時にヘッダーを表示/非表示にしない

分類Dev

ClojureHashMapのルックアップに関するパフォーマンスの問題

分類Dev

DB接続チェックを実行する際のパフォーマンスの問題

Related 関連記事

  1. 1

    パフォーマンスの問題のために結合する際の一時テーブルの使用

  2. 2

    パフォーマンスの問題-列ヘッダーに基づいて列を再配置する

  3. 3

    スクロールで上部のヘッダーを非表示にする

  4. 4

    パフォーマンステストの実行時にプロファイルを挿入する際の問題

  5. 5

    フルカラーにスクロールする際の透明なヘッダー-ナビゲーションオーバーレイの問題

  6. 6

    RecyclerViewの画像をダウンロードする際のパフォーマンスの問題

  7. 7

    ヘッダーグリッドビューのヘッダーを非表示にする際の問題

  8. 8

    マーベリック10.9.2に電力線のパッチが適用されたフォントをインストールする際の問題

  9. 9

    ファイルのパフォーマンスの問題を同時に圧縮およびダウンロードする

  10. 10

    Javascriptのパフォーマンス:スクロールのテーブルヘッダーと列を修正

  11. 11

    オブジェクト参照を配列に保存する際のパフォーマンスの問題

  12. 12

    リストボックスC#にフォルダ名を追加する際のフォーマットの問題

  13. 13

    リモートサーバーを特定のフォルダーにマウントする際のアクセス許可の問題

  14. 14

    スクロールバースタイルのオーバーライドに関するAngularVirtualスクロールのパフォーマンスの問題

  15. 15

    セル値に基づいてGoogleシートの複数の行を非表示にする-パフォーマンスの問題

  16. 16

    Chrome Dev Toolでネットワークのウォーターフォールを使用してWebレンダリングのパフォーマンスの問題を診断するにはどうすればよいですか?

  17. 17

    jQueryで動的CSSを追加する際にパフォーマンスの問題はありますか?

  18. 18

    ページ上部にヘッダーを表示-スクロールイベントの再起動の問題

  19. 19

    Regd:ODACを介してOracleサーバーに接続する際のパフォーマンスの問題

  20. 20

    コンボボックスフィールドのレンダラーにストレージをロードする際の問題

  21. 21

    Laravel5.1でメールを送信する際のパフォーマンスの問題

  22. 22

    WebアプリケーションがDocumentRootの外部のフォルダーにアクセスできるようにApacheを構成する際の問題

  23. 23

    スクロール時にヘッダーの色を変更するJavaScript

  24. 24

    ループパフォーマンスの問題に対するパンダのリサンプリング

  25. 25

    ビューページャーのrecyclerviewに大きなデータをロードする際のパフォーマンスの問題

  26. 26

    Oracleテーブルのレコードを更新する際のEntityFrameworkのパフォーマンスの問題

  27. 27

    フラグメント内の折りたたみツールバーがスクロール時にヘッダーを表示/非表示にしない

  28. 28

    ClojureHashMapのルックアップに関するパフォーマンスの問題

  29. 29

    DB接続チェックを実行する際のパフォーマンスの問題

ホットタグ

アーカイブ