次に、上の図のような効果やその他のスクロール関連の機能を実現しながら、 理解する必要がある DOM プロパティとメソッド: scrollTop、clientHeight、scrollHeight 3 つの属性間の関係は次の図に示されています。 getBoundingClientRect() このメソッドは、要素のレイアウトに必要な、 スクロールバイ(x,y) スクロール先(x,y) ローリング制御準備の実施 まずは <!DOCTYPE html> <html> <ヘッド> <title>スクロールバー設定の詳細な説明</title> <スタイル> #スクロールコンテナ{ 高さ: 500px; 幅: 500ピクセル; overflow-y: スクロール; パディング: 50px; ボックスのサイズ: 境界線ボックス; } .スクロールアイテム{ 高さ: 200px; 幅: 500ピクセル; 上マージン: 20px; 背景色: アクアマリン; ディスプレイ: フレックス; アイテムの位置を中央揃えにします。 コンテンツの中央揃え: 中央; } </スタイル> </head> <本文> <div id="スクロールコンテナ"> <div id="スクロールコンテナ"> <div id="item1" class="scroll_item"> <span>1</span> </div> <div id="item2" class="scroll_item"> <span>2</span> </div> <div id="item3" class="scroll_item"> <span>3</span> </div> <div id="item4" class="scroll_item"> <span>4</span> </div> <div id="item5" class="scroll_item"> <span>5</span> </div> </div> <button onclick="addItem()">要素を追加する</button> </div> </本文> <スクリプト> コンテナを document.getElementById("scroll_container"); インデックスを5とします。 //要素を追加する function addItem(){ インデックス+=1; item=`<div id="${'item'+index}" class="scroll_item">とします。 <span>${インデックス}</span> </div>`; コンテナ.innerHTML+=アイテム; タイムアウトを設定します(()=>{ スクロールしてインデックスを作成します。 }) } </スクリプト> </html> 上記のコードにはスクロール可能な領域が含まれており、スクロール領域に要素を追加したり、指定した要素の位置までスクロールしたりできます。一般的な効果は、次の図のようになります。 scrollTopを使用して達成する 基本的な実装
関数scrollToBottom(){ y = container.scrollHeight - container.clientHeight とします。 コンテナのスクロールトップ=y; } 同様に、一番上までスクロールしたい場合は、 関数 scrollToTop(){ コンテナのスクロールトップ=0; }
関数 scrollToElement(el){ コンテナのスクロールトップ+=el.getBoundingClientRect().top; } アニメーションを追加 一番下までスクロール しかし、上記のコードのスクロールは固すぎます。setInterval //まずscrollToBottom関数を記述します。function scrollToBottom(el){ if(!el){ el=コンテナ; } //元の値 let startTop=el.scrollTop; //最終値 let endTop=el.scrollHeight-el.clientHeight; //アニメーション制御関数を生成します。let scrollAnimationFn=doAnimation(startTop,endTop,300,el); // 10msごとにアニメーションを実行する let interval=setInterval(()=>{ scrollAnimationFn(間隔) },10) } /** * @description: アニメーション制御関数を生成するファクトリー関数(クロージャを使用) * @パラメータ { startValue: 変数の元の値 endValue: 変数の最終値duration: アニメーションの継続時間el: スクロールアニメーションを実行する要素} * @戻り値: null */ 関数doAnimation(開始値、終了値、継続時間、el){ //クロージャを使用して変数 dy と step (各アニメーションのスクロール距離) を保存します。 dy=0 とします。 ステップを(終了値-開始値)/(継続時間/10)とします。 //アニメーション制御関数を返す return function(interval){ dy+=ステップ; if(dy>=終了値-開始値){ clearInterval(間隔); } el.scrollTop+=ステップ; } } addItem 関数を変更して、下部へのスクロールアニメーションを追加します。 関数addItem(){ インデックス+=1; item=`<div id="${'item'+index}" class="scroll_item">とします。 <span>${インデックス}</span> </div>`; コンテナ.innerHTML+=アイテム; タイムアウトを設定します(()=>{ // スクロールしてインデックスを作成します。 scrollToBottom(コンテナ); }) } 次に、HTML の下部にスクロール ボタンを追加します。 <button onclick="scrollToBottom()">一番下までスクロール</button> 上へスクロール 上記の方法に従って、上部にスクロールする一般的なアニメーションを実装することもできます。 //scrollToTop関数を記述する function scrollToTop(el){ if(!el){ el=コンテナ; } //元の値 let startTop=el.scrollTop; //最終値 let endTop=0; //アニメーション制御関数を生成します。let scrollAnimationFn=doAnimation(startTop,endTop,300,el); // 10msごとにアニメーションを実行する let interval=setInterval(()=>{ scrollAnimationFn(間隔) },10) } 一番下へのスクロールに適応するには、アニメーションの停止のタイミングを変更する必要があります。変更された 関数doAnimation(開始値、終了値、継続時間、el){ //クロージャを使用して変数 dy と step (各アニメーションのスクロール距離) を保存します。 dy=0 とします。 ステップを(終了値-開始値)/(継続時間/10)とします。 関数を返す(間隔){ dy+=ステップ; //ここで絶対値判定を使用するように変更します if(Math.abs(dy)>=Math.abs(endValue-startValue)){ clearInterval(間隔); } el.scrollTop+=ステップ; } } 最後に、 <button onclick="scrollToTop()">先頭へスクロール</button> 効果は以下のとおりです。 指定された要素までスクロールします まず、必要なボタンと入力ボックスを HTML 要素に追加します。 <input type="number" placeholder="スクロールする要素のインデックスを入力してください" style="width: 200px;"/> <button onclick="scrollToElement()">指定された要素までスクロールします</button> 指定した要素をスクロールするためのアニメーション実行関数を追加します。 関数 scrollToElement(containerEl,el){ if(!コンテナEl){ //親要素 containerEl=container; } if(!el){ //スクロールする要素を取得します。 input=document.getElementsByTagName('input')[0]; id='item'+input.value; とします。 if(!入力値){ id='アイテム'+インデックス; } el=ドキュメント.getElementById(id); } startTop=containerEl.scrollTop とします。 endTop=startTop+el.getBoundingClientRect().top とします。 scrollAnimationFn=doAnimation(startTop,endTop,300,containerEl); を設定します。 間隔をsetInterval(()=>{とする scrollAnimationFn(間隔) },10) } 効果は以下のとおりです。 scrollTo() の使用
//ここでは、y 軸スクロールを例に挙げます。element.scrollTo(0,y); 要素のスクロールトップ=y; //上記の 2 つの文は同じ効果があります。 したがって、 関数doAnimation(開始値、終了値、継続時間、el){ //クロージャを使用して変数 dy と step (各アニメーションのスクロール距離) を保存します。 dy=0 とします。 step=(終了値-開始値)/(継続時間/10)とします。 関数を返す(間隔){ dy+=ステップ; (Math.abs(dy)>=Math.abs(endValue-startValue))の場合{ clearInterval(間隔); } //el.scrollTop+=step; //このコード行は次のように変更されます el.scrollTo(0,el.scrollTop+step); } } 実行効果は scrollBy() の使用 基本的な実装 また、 関数 scrollToElement(containerEl,el){ //getBoundingClientRect().top は子要素の上端と親要素の上端の間の距離なので、この値は親要素に対する子要素のオフセットです。この値を scrollBy に渡します。つまり、指定された要素までスクロールします。containerEl.scrollBy(0,el.getBoundingClientRect().top); } 一番下までスクロールします: 関数 scrollToBottom(containerEl){ dy=containerEl.scrollHeight-containerEl.clientHeight; とします。 コンテナEl.scrollBy(0,dy); } 上へスクロール 関数 scrollToTop(containerEl){ dy = -(containerEl.scrollHeight - containerEl.clientHeight)とします。 コンテナEl.scrollBy(0,dy); } アニメーションを追加 ここでは 関数 scrollToBottom(containerEl){ if(!コンテナEl){ containerEl=コンテナ; } //dy はオフセットです。let dy=containerEl.scrollHeight-containerEl.clientHeight; scrollAnimationFn=doAnimation(dy,300,containerEl); を設定します。 間隔をsetInterval(()=>{とする scrollAnimationFn(間隔) },10) } 関数 scrollToTop(containerEl){ if(!コンテナEl){ containerEl=コンテナ; } //dy はオフセットです。let dy=-(containerEl.scrollHeight-containerEl.clientHeight); scrollAnimationFn=doAnimation(dy,300,containerEl); を設定します。 間隔をsetInterval(()=>{とする scrollAnimationFn(間隔) },10) } 関数 scrollToElement(containerEl,el){ if(!コンテナEl){ containerEl=コンテナ; } if(!el){ 入力を document.getElementsByTagName('input')[0] にします。 id='item'+input.value; とします。 if(!入力値){ id='アイテム'+インデックス; } el=ドキュメント.getElementById(id); } //dy はオフセットです。let dy=el.getBoundingClientRect().top; scrollAnimationFn = doAnimation(dy, 300, containerEl); とします。 間隔をsetInterval(()=>{とする scrollAnimationFn(間隔) },10) } /** * @説明: * @param {型} * @戻る: */ 関数doAnimation(dy,duration,el){ //クロージャを使用して、exe_dy や step (各アニメーションのスクロール距離) などの変数を保存します。 let exe_dy=0; //オフセットはすでに実行済み let step=dy/(duration/10); 関数を返す(間隔){ exe_dy+=ステップ; (Math.abs(exe_dy)>=Math.abs(dy))の場合{ clearInterval(間隔); } el.scrollBy(0,ステップ); } } 実行効果は やっと 上記: point_up_2: は、DOM スクロール バー コントロールの詳細な要約と説明、およびいくつかの基本的な使用方法です。 これで、HTML における DOM 要素のスクロールバーのスクロール制御の詳細概要に関するこの記事は終了です。より関連性の高い DOM 要素のスクロールバーのスクロール コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 |
>>: 超大型フォントを使用した 40 の Web ページ デザイン
ヒント:配列変更メソッドによりv-forが更新され、ページが更新されます。配列を変更しないメソッド:...
目次概要静的型チェックコードスタイルチェック(Linter)パッケージマネージャーモジュールローダー...
.NET の世界に参入したい開発者であれば、何が可能なのかを知る必要があります。 .NET Fram...
垂直分割垂直分割とは、データテーブルの列を分割すること、つまり、多くの列を持つテーブルを複数のテーブ...
プロジェクトを開発しているとき、支払い済み、支払済み、クローズ済み、返金済みなどの注文ステータスなど...
目次1. グローバルに登録されたコンポーネント2. グローバルカスタム指示vue 、新しいプラグイン...
成果を達成する実装コードhtml <input type="radio" ...
Navicat を使用して IP 経由で直接接続すると、次のようなさまざまなエラーが報告されます: ...
この記事では、例を使用して MySQL トリガーの簡単な使用方法を説明します。ご参考までに、詳細は以...
ブラウザが IE のどのバージョンであるかを検出するためによく使用される JavaScript コー...
コードは次のようになります。 。プロセス{ 境界線:1px 実線 #B7B7B8; 背景:#F8F8...
antd-mobileをインストールするグローバル輸入 npm をインストール antd-mobil...
目次基本的なセレクター:レベルセレクター:属性セレクター:フィルターセレクター:フォーム属性セレクタ...
目次リスナープロパティとは何ですか?リスニングプロパティと計算プロパティの違いは何ですか?監視プロパ...
1 概要システム Centos8 では、httpd を使用してローカル Web サーバーを構築します...