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 アルゴリズム戦略の詳細な説明

推薦する

メモリの原則に関する詳細な説明: JS では変数はヒープに保存されるのか、スタックに保存されるのか?

目次1. 冷蔵庫に入りきらない象2. シャドウクローン文字列3. 実際に見た「奇妙なボール」 4. ...

MySQL シリーズ II マルチインスタンス構成

チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...

MySQL スケジュール データベース バックアップ (フル データベース バックアップ) の実装

目次1. MySQLデータのバックアップ1.1. データをバックアップするためのmysqldumpコ...

Linuxで権限が拒否された場合の解決策の詳細な説明

許可が拒否されました:その理由は、ファイルの読み取り、書き込み、作成、削除などの権限がないためです。...

CentOS7 で jar アプリケーションの起動を設定する方法

プロジェクトの展開中に遭遇した落とし穴Zhihudemo を展開する際、Jenkins などの自動展...

Jsモジュールパッケージのエクスポートの使用法と違いにはインポートが必要

目次1. Commonjsのエクスポートとrequireの使用1.1 CommonJS エクスポート...

nginx でネストされた if メソッドを実装する方法

Nginx はネストされた if ステートメントをサポートしておらず、if ステートメントでの論理判...

jQueryはシンプルなボタンの色の変更を実装します

HTML と CSS で、ボタンの色を設定したいとします。 目的の効果は得られますが、プロセスはかな...

Dockerはブリッジを追加し、IPアドレスの範囲を設定します

バイナリ docker 19.03 バージョンがインストール後に docker0 ブリッジを自動的に...

Dockerコンテナの紹介

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

Web ページ WB.ExecWB 制御印刷メソッド呼び出しの説明とパラメータの紹介

WebページWB.ExecWB制御印刷方法コードをコピーコードは次のとおりです。 <テーブルの...

MySQL で指定した桁数の乱数を生成する方法と、バッチで乱数を生成する方法

1. まず、よく使われるMySQL関数をいくつか紹介しますRAND() は 0 から 1 (0<...

Ubuntu 20.04 に cuda10.1 をインストールする手順 (グラフィック チュートリアル)

インストール前の準備CUDA の主な目的はディープラーニングであり、現在主流のディープラーニングフレ...

VMWare仮想マシンのcentosの時間が現地時間と矛盾する問題を解決する

VM Ware 仮想マシン CentOS の時刻は、次の図に示すように、現地時間と一致しません。おそ...

Vue はクリックフリップ効果を実現します

参考までに、vueを使用してクリックフリップエフェクトを簡単に実装します。具体的な内容は次のとおりで...