この記事では、アンカー配置を実装するためのVueの具体的なコードを例として紹介します。具体的な内容は次のとおりです。 ここでは主に、スクロールによってトリガーされる単純なアンカー ポイントの強調表示を実装し、アンカー ポイントをクリックしてスクロール機能をトリガーします。ブラウザーのスクロールの高さを取得する場合は、ブラウザーごとに異なります。次の方法を使用します。 Chrome: document.body.scrollTop ここではローカル要素をスクロールしているので、少し異なります。まず、HTML と CSS のコード ブロックを添付します。 scroll-content はスクロール領域であり、operation-btn はアンカー ポイントの動作を制御するボタンです。 <テンプレート> <div class="アンカーポイント"> <!-- スクロール領域 --> <div class="スクロールコンテンツ" @scroll="onScroll"> <div class="scroll-item" style="height: 500px;background: #3a8ee6;">1つのレイヤー</div> <div class="scroll-item" style="height: 500px;background: red;">2階</div> <div class="scroll-item" style="height: 500px;background: #42b983">3 つのレイヤー</div> <div class="scroll-item" style="height: 1000px;background: yellow;">4 つのレイヤー</div> </div> <!-- ボタン --> <div class="操作-btn"> <div v-for="(item, index) in ['1階','2階','3階','4階']" :key="index" @click="jump(index)" :style="{background: activeStep === index ? '#eeeeee' : '#ffffff'}">{{item}} </div> </div> </div> </テンプレート> <style lang="scss" スコープ> .アンカーポイント{ フレックスベース: 100%; ディスプレイ: フレックス; オーバーフロー: 非表示; .スクロールコンテンツ{ 高さ: 100%; 幅: 90%; オーバーフロー: スクロール; } .操作ボタン{ 幅: 10%; 高さ: 100%; } } </スタイル> スクロールイベントをリッスンして、アンカーボタンを強調表示します ここでは、スクロール項目をトラバースすることで、スクロールバーのスクロール距離が現在の項目のスクロール可能な距離(つまり、その offsetParent の上部からの距離、ここでは body)よりも大きいかどうかを判断します。 //スクロールトリガーボタンのハイライト onScroll (e) { scrollItems = document.querySelectorAll('.scroll-item') とします。 (let i = scrollItems.length - 1; i >= 0; i--) { //スクロールバーのスクロール距離が現在のスクロール項目のスクロール可能な距離より大きいかどうかを判断します。let judge = e.target.scrollTop >= scrollItems[i].offsetTop - scrollItems[0].offsetTop (判断)の場合{ this.activeStep = i 壊す } } }, クリックイベントを追加し、アンカーポイントに応じて対応する領域までスクロールし、スムーズなスクロールを実現します。 ここでは、インターネット上の方法を参考に、スクロール距離を複数の小さなセグメントに分割し、上方向と下方向のスクロールを考慮してスクロール遷移アニメーションを実現します。 // クリックするとアンカーポイントが切り替わります。ジャンプ(インデックス){ ターゲットを document.querySelector('.scroll-content') にします。 scrollItems = document.querySelectorAll('.scroll-item') とします。 // スクロールバーが下までスクロールしたかどうかを判定します。if (target.scrollHeight <= target.scrollTop + target.clientHeight) { this.activeStep = インデックス } let total = scrollItems[index].offsetTop - scrollItems[0].offsetTop // アンカー要素とその offsetParent (ここでは body) の上端間の距離 (スクロールする距離) let distance = document.querySelector('.scroll-content').scrollTop // スクロールバーとスクロール領域の上端の間の距離 // let distance = document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset // スクロールバーとスクロール領域の上端の間の距離 (スクロール領域はウィンドウです) // スクロールアニメーションの実装。setTimeout 再帰を使用してスムーズなスクロールを実現し、距離を 50 の小さなセグメントに分割し、10 ミリ秒ごとに 1 回スクロールします。// 各小さなセグメントの距離を計算します。let step = total / 50 (合計>距離)の場合{ スムーズダウン(document.querySelector('.scroll-content')) } それ以外 { newTotal = 距離 - 合計 ステップ = 新しい合計 / 50 スムーズアップ(document.querySelector('.scroll-content')) } // パラメータ要素はスクロール領域です function SmoothDown (element) { (距離 < 合計)の場合{ 距離 += ステップ element.scrollTop = 距離 タイムアウトを設定します(smoothDown.bind(this, 要素), 10) } それ以外 { element.scrollTop = 合計 } } // パラメータ要素はスクロール領域です function SmoothUp (element) { (距離>合計)の場合{ 距離 -= ステップ element.scrollTop = 距離 タイムアウトを設定します(smoothUp.bind(this, 要素), 10) } それ以外 { element.scrollTop = 合計 } } // document.querySelectorAll('.scroll-item').forEach((item, index1) => { // if (インデックス === インデックス1) { // item.scrollIntoView({ // ブロック: '開始', // 動作: 'スムーズ' // }) // } // }) } 効果図は次のとおりです。 アンカー ポイントの配置とスクロール ハイライト アンカー ポイントの効果を実装したのは今回が初めてです。いくつか欠点があります。質問や提案があれば、ご指摘ください。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Nginx Rewriteモジュールを使用するいくつかのシナリオ
>>: MySql 学習 3 日目: データ テーブル間の接続とクエリの詳細
ファイルとは何ですか?すべてのファイルは実際には文字列のストリームですが、適切な解析方法を使用すると...
1. yumソースの設定ファイルを入力します 2.lsで設定ファイルを表示する 3. ディレクトリを...
序文以前、MySQL 5.6 をインストールしました。3 か月後、開発者から MySQL で JSO...
ダウンロード参考:ダウンロードするコアパッケージを選択してくださいダウンロード後、ファイルをサーバー...
構造とプレゼンテーションを分離するもう 1 つの重要な側面は、セマンティック マークアップを使用して...
この記事では、MySQL 5.7 zipアーカイブ版のインストールチュートリアルを参考までに紹介しま...
最近、プロジェクトで input size 属性と maxlength 属性を使用しました。以前は、...
フロントエンドとバックエンドを分離し、nginxを使用してクロスドメインの問題を解決するフロントエン...
Navicat を使用して IP 経由で直接接続すると、次のようなさまざまなエラーが報告されます: ...
負荷分散とは負荷分散は主に、専用のハードウェア デバイスまたはソフトウェア アルゴリズムによって実現...
目次1. バブルソートとは何か2. 例を挙げるラウンド1:第2ラウンド:第3ラウンド:第4ラウンド:...
1. 組み込みソフトウェアレベル 1) ブートローダ -> ブートローダ組み込みシステム全体の...
私は長い間 CSS を使用してきましたが、Web 要素の関連属性を設定するために常に「px」を使用し...
<br />前回のCSSに関する記事は、多くの人にあまり理解されませんでした。そのため、...
IPツールを取得 lombok.extern.slf4j.Slf4j をインポートします。 org....