CSS スティッキーレイアウトを使用してヘッダーを上部に配置する方法

CSS スティッキーレイアウトを使用してヘッダーを上部に配置する方法

適用シナリオ:

新しい要件の 1 つはアンケート調査を行うことですが、必然的に多くの質問が含まれ、1 つの質問で複数の人が採点する必要があります。この現象は携帯電話でスライドするときに発生し、上にスワイプすると質問を忘れてしまいます。 そのため、一定の距離を計算した上でタイトルを配置する必要があります。スコアリングを容易にするために、エリアにスライドするタイトルを常に上部に固定します。

解決:

1. 最初に思い浮かぶのは固定レイアウトです。これは、タイトルが一定の距離に達すると画面の上部に固定されることを意味します。 (可能ですが、プロセスがあまりスムーズではありません)
2. スティッキーレイアウト

Sticky はこの要件を非常によく満たしますが、互換性 (IE との互換性) を考慮する必要があります。

スティッキー実装のアイデア:

1. まず、スライダーの位置を記録し、スクロール イベントをリッスンする必要があります。

window.addEventListener("スクロール", this.handleScroll);

コンポーネントが破棄される前にこのイベントを削除することを忘れないでください beforeDestroyed() {
    window.removeEventListener("スクロール"、this.handleScroll);
  }

2. 画面上部から各質問のタイトルの高さを計算し、配列を作成します。

// 各質問に必ず参照を設定してください。私の参照は各質問の ID です。

-- Vue の略語 ---
<div
  :ref="質問ID"
  v-for="formData.questions の (質問、インデックス)"
  :key="インデックス"
>


// 乱雑さの問題を防ぐために、ソートも実行しました ---- js -----
 this.topPositionArr = [];
  for (let key in this.$refs) {
      for (let idx in this.$refs[key]) {
        this.topPositionArr.push(this.$refs[key][idx].offsetTop);
      }
    }
    this.topPositionArr = [...新しいSet(this.topPositionArr)];
    this.topPositionArrtopPositionArr = this.topPositionArr.sort(
      (a, b) => {
        a - b を返します。
      }
    );        

3. スライドで監視した距離と取得したタイトルを比較し、見つかったタイトルを選択します。

// さまざまなブラウザと互換性があります。ブラウザによって offsetTop を取得する方法が異なります。handleScroll() {
    this.scrollTop = document.documentElement.scrollTop
  ? ドキュメント.documentElement.scrollTop
  : ドキュメント本体のスクロールトップ;
  
scrollTop を this.scrollTop とします。
// 最初の質問の scrollTop は変更されず、2 番目の質問の scrollTop が変更されます this.topPositionArr.forEach((item, idx) => {
  (idx > 1)の場合{
    this.scrollTop = scrollTop + 220;
  }
  //なぜこれを行うのですか? IEは固定レイアウトをサポートしていないため、補助するプラグインが必要です。if (this.scrollTop > item) {
    elements = document.getElementById(`sticky${idx}`);
    スティッキーフィルに要素を追加します。
  }
});
}

4. IEの互換性の問題

IEはスティッキーレイアウトをサポートしていないため、ホイールのスティッキーフィルが必要です。

npm インストール スティッキーフィル 
糸 スティッキーフィルを追加

---ビュー---
ヘッダーdivタグには、一意性を示すために動的なIDを与える必要がある

<div
  :id="`sticky${question.index}`"
  クラス="isSticky"
>

単一ファイルのインポート

必要なページにインポートします。
<script src="stickyfill.min.js へのパス"></script>
var Stickyfill = require("stickyfill");
var スティッキーフィル = スティッキーフィル();

js ファイル:

具体的な方法については上記3を参照
elements = document.getElementById(`sticky${idx}`);
スティッキーフィルに要素を追加します。

上記は完璧に実現できます~~~
PS: Google との互換性だけが必要なら、それほど苦労する必要はありません。ホイールを必要とせずに、スティッキー レイアウトを直接使用できます。
https://www.zhangxinxu.com/wordpress/2018/12/css-position-sticky/Xu Xinの記事を参照してください。

最終効果画像:

CSS スティッキーレイアウトを使用してヘッダーを上部に配置する方法についての記事はこれで終わりです。より関連性の高い CSS スティッキーコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  Docker ケース分析: Redis サービスの構築

>>:  React の調整アルゴリズム Diffing アルゴリズム戦略の詳細な説明

推薦する

Tomcat の 404 エラーの解決方法の詳細な説明

Tomcat テストで 404 問題が発生します。問題は次のとおりです。 HTTP ステータス 40...

Windows 10 1903 エラー 0xc0000135 の解決方法 [推奨]

Windows 10 1903 は、2019 年に Microsoft がリリースした Windo...

DevUI で独自の Angular コンポーネント ライブラリを構築する方法

目次序文コンポーネントライブラリの作成主要な構成の変更ディレクトリレイアウトの調整ライブラリ構築のた...

CSS3マスクレイヤーのくり抜き効果を実現するさまざまな方法

この記事では、マスク レイヤーの中空化を実現する 4 つの方法を紹介します。みんなと共有し、自分用の...

Nginx SSL証明書設定エラーの解決策

1. はじめにWeb プロジェクトを Linux サーバーで公開する場合、SSL 証明書を構成する必...

Vueプロジェクトでスケルトンスクリーンを使用する方法

現在、アプリケーション開発は基本的にフロントエンドとバックエンドに分離されています。主流のフロントエ...

MySQLの基本的な共通コマンドの概要

目次MySQL の基本的な共通コマンド1. SQL文2. テーブルを作成する3. フィールドのプロパ...

Dockerコンテナの紹介

Dockerの概要Docker はオープンソースのソフトウェア展開ソリューションです。 Docker...

React は antd のアップロード コンポーネントを使用してファイル フォーム送信機能を実装します (完全なコード)

私はプロジェクトを実行するために react を使い始めたばかりで、非常に未熟で完全な初心者です。私...

Google Recaptcha 認証を使用した Vue 実装例

最近のプロジェクトでは、Google ロボット認証を使用する必要があります。これには VPN が必要...

CSS は、小さな鋭角のチャット ダイアログ ボックスで鋭角の吹き出し効果を実現します。

1. CSS を使用して、小さな尖った角のチャット ダイアログ ボックスと尖った角の吹き出しを描画...

Nginxのアクセス制限設定の詳細な説明

Nginxのアクセス制限設定とはNginx のアクセス制限は、IP ベースのアクセス制御とユーザーベ...

CSS3 で translate と transition を使用する方法

translate と transition は非常に強力で、習得するのは不可能だといつも感じていま...

MySQL スロークエリログの詳細な理解

目次スロークエリログとは何ですか?スロークエリを有効にする方法ログ分析ツール mysqldumpsh...