JavaScriptはスクロールバーの位置を取得し、ページをアンカーポイントまでスライドします。

JavaScriptはスクロールバーの位置を取得し、ページをアンカーポイントまでスライドします。

序文

この記事は、私が最近仕事で遭遇した問題を記録したものです。アプリネイティブとフロントエンドのh5のハイブリッド開発の過程で、ページの1つは都市リストを選択するページです。これは、MeituanとEle.meの都市選択、銀行アプリの銀行リスト選択、アドレス帳の連絡先選択のアンカーポイントのクイックポジショニングに似ています。初心者として、この機能はまだ少しストレスを感じています。私が見つけた実装方法をいくつか紹介します。

アンカーポイント問題とは何ですか?

PC 側の Web ページの場合、一般的な Web ページの右側にある先頭に戻るボタンをクリックすると、Web ページの先頭に直接ジャンプし、アンカー ポイントが実現されます。

モバイル デバイスの場合、携帯電話のアドレス帳を開き、右側の文字をクリックすると、対応する文字の連絡先に直接ページがジャンプします。これもアンカー ポイントの実装です。

一般的な解決策

1. <a>タグのhref属性はジャンプ要素のidの値に設定されます。

<スタイル>
    #私のdiv{
      高さ: 1200ピクセル;
      幅: 100%;
      背景色: ピンク;
      位置: 相対的;
    }
    {
      位置: 絶対;
      上: 1000ピクセル;
      左: 1000ピクセル;
    }
   </スタイル>
  <div id="mydiv">
    私はページのトップです</div>
  <a href="#mydiv" rel="external nofollow" >トップに戻る</a>

上記の方法はハイパーリンクを設定するのと同じで、a タグは直接ジャンプしますが、ブラウザのアドレスバーのアドレスが変更されるため、あまり実用的ではありません。

2. ネイティブjsはスクロールバーの位置を取得し、scrollTopを変更します

<スタイル>
    体{
      位置: 相対的;
    }
    h1{
      マージン: 0 自動;
    }
    .mybtn1{
      位置: 固定;
      左: 200px;
      上: 500px;
    }
    .mybtn2{
      位置: 固定;
      左: 200px;
      上: 550px;
    }
  </スタイル>
  <本文>
    <h1 id="topH1">1</h1>
    <h1>2</h1>
    <h1>3</h1>
    <h1>4</h1>
    <h1>5</h1>
    <h1>6</h1>
    <h1>7</h1>
    <h1>1</h1>
    <h1>2</h1>
    <h1>3</h1>
    <h1>4</h1>
    <h1>5</h1>
    <h1>6</h1>
    <h1>7</h1>
    <h1>1</h1>
    <h1>2</h1>
    <h1>3</h1>
    <h1>4</h1>
    <h1>5</h1>
    <h1>6</h1>
    <h1 id="tobtmH1">7</h1>
  <button class="mybtn1" onclick="toTop()">トップに戻る</button>
  <スクリプト>
   関数toTop(){
    var topH1 = document.getElementById("topH1")
    document.documentElement.scrollTop=topH1.offsetTop 
    window.pageYOffset=topH1.offsetTop 
    document.body.scrollTop=topH1.offsetTop;
    
   }
  </スクリプト> 
  </本文>

この方法は、ボタンにクリックイベントを追加し、クリックイベントがトリガーされた後にスクロールバーの位置を変更します。ただし、この方法では互換性の問題に対処する必要があり、面倒です。PC とモバイル端末でテストされ、効果があることが確認されています。

3.element.scrollIntoviewはビューに応じてスクロールバーを変更します

<スタイル>
    体{
      位置: 相対的;
    }
    .mydiv{
      上マージン: 100px;
      境界線: 1px ピンク
    }
    h1{
      マージン: 0 自動;
    }
    .mybtn1{
      位置: 固定;
      左: 200px;
      上: 500px;
    }
    .mybtn2{
      位置: 固定;
      左: 200px;
      上: 550px;
    }
</スタイル>
<本文>
  <div class="mydiv">
  <h1 id="topH1">1</h1>
  <h1>2</h1>
  <h1>3</h1>
  <h1>4</h1>
  <h1>5</h1>
  <h1>6</h1>
  <h1>7</h1>
  <h1>1</h1>
  <h1>2</h1>
  <h1>3</h1>
  <h1>4</h1>
  <h1>5</h1>
  <h1>6</h1>
  <h1>7</h1>
  <h1>1</h1>
  <h1>2</h1>
  <h1>3</h1>
  <h1>4</h1>
  <h1>5</h1>
  <h1>6</h1>
  <h1 id="tobtmH1">7</h1>
</div>
  <button class="mybtn1" onclick="toTop()">トップに戻る</button>
  <button class="mybtn2" onclick="toBtm()">一番下へ移動</button>
  <スクリプト>
    window.onload = 関数(){

    }
  // 呼び出しメソッドは element.scrollIntoview() です
  //パラメータがtrueの場合、ページまたはコンテナは、要素の上部がビューコンテナの上部に揃うようにスクロールします。//パラメータがfalseの場合、要素の下部がビューコンテナの下部に揃います。function toTop(){
      var topH1 = document.getElementById('topH1')
      topH1.scrollIntoView(true)
    }
    関数toBtm() {
      var tobtmH1 = document.getElementById('tobtmH1')
      tobtmH1.scrollIntoView(false)
    }
  </スクリプト> 
</本文>

上記の方法は、アンカー ポイントをビューの上部または下部にジャンプする方法です。この方法にはそれほど多くの欠点はなく、PC とモバイル デバイスの両方でテストされ、効果があることが証明されています。

高度なソリューション

高度な方法は、第3世代のプラグインbetter-scrollを呼び出すことです。この方法は個人的にテストされておらず、データに落とし穴はあまりありません。必要な場合は、自分で追加してください。

上記は、JavaScript でスクロール バーの位置を取得し、ページをアンカー ポイントまでスライドさせる方法の詳細です。JavaScript スクロール バーをアンカー ポイントまでスライドさせる方法については、123WORDPRESS.COM の他の関連記事もご覧ください。

以下もご興味があるかもしれません:
  • Vue-scroller ページ入力ボックスを使用してもスライドがトリガーされない問題と解決策
  • Vueはbetter-scrollに基づいて左右のリンクスライドページを実装します
  • Vue はページ切り替えスライド効果を実装します
  • 指を使って Vue ルーティング ページ間をスライドする方法
  • Vueをベースにページ切り替えの左右スライド効果を実装する
  • フロントエンドページのスライド検証を実装するための JavaScript + HTML (2)
  • フロントエンドページのスライド検証を実装するための JavaScript + HTML
  • jsを使用してページの下部にスライドし、より多くの機能を自動的に読み込む
  • js/jquery コントロール ページ 動的読み込み データ スライディング スクロール バー 自動読み込み イベント メソッド
  • Vue/jsで自動ページスライドアップ効果を実現

<<:  SSHのssh-keygenコマンドの基本的な使い方の詳細な説明

>>:  MySQL でよく使用されるステートメントの包括的な概要 (必読)

推薦する

MySQL ディープ ページング (数千万のデータを素早くページ分割する方法)

目次序文場合最適化まとめ序文バックエンド開発では、一度に大量のデータがロードされ、メモリやディスク ...

Spark RDD をデータフレームに変換し、それを MySQL に書き込む例

DataframeはSpark 1.3.0で導入された新しいAPIで、Sparkで大規模な構造化デー...

VueでJSXを使用する方法

JSXとは何かJSX は Javascript の構文拡張であり、JSX = Javascript ...

React Native が「NSArray<id<RCTBridgeModule>>型のパラメータを初期化できません」というエラーを報告する (解決方法)

最近、古い RN プロジェクトを Xcode で実行すると、次のコード エラーが報告されました。 &...

MySQL ピボットテーブルについての簡単な説明

次のような製品部品表があります。一部 部品ID 部品タイプ 製品ID ---------------...

Linux に MySQL 8.0.x をインストールするための完全な手順

マイグレーションMySQL 入門MySQL はもともとオープンソースのリレーショナル データベース管...

JavaScript を使用して div の位置をドラッグして入れ替える例

1 実施原則これは、DOM 要素の dragstart/ondragover/ondrop イベント...

OEL7.6 ソースコードから MYSQL5.7 をインストールするチュートリアル

まず、公式サイト https://dev.mysql.com/downloads/mysql/5.7...

CSS を解析して画像のテーマカラー機能を抽出する (ヒント)

背景すべては、WeChat 技術グループのクラスメートが「写真の主な色を取得する方法はあるか」と尋ね...

JSオブジェクトの走査順序の詳細な説明

JavaScript ではオブジェクトを走査する順序は固定されていないと聞いたことがある人もいるかも...

Vue-cli を使用して Vue プロジェクトを構築する手順の詳細な説明

まず、Vue-cli をインストールする必要があります。 npm インストール -g vue-cli...

MySQLとOracleの違いのまとめ(機能性能の比較、選択、使用時のSQLなど)

1. 同時実行性同時実行性は OLTP データベースの最も重要な機能ですが、同時実行性にはリソース...

ES6 ループと反復可能オブジェクトの例

この記事では、ES6 の for ... of ループについて説明します。古い方法以前は、JavaS...

HTML 文法百科事典_HTML 言語文法百科事典 (必読)

ボリュームラベル、プロパティ名、説明002 <! - - ... - -> コメント00...

...