1. 程式人生 > 程式設計 >JavaScript 獲取滾動條位置並將頁面滑動到錨點

JavaScript 獲取滾動條位置並將頁面滑動到錨點

前言

這篇來記錄下最近工作中遇到的一個問題,在app原生和前端h5混合開發的過程中,其中一個頁面是選擇城市列表的頁面,類似於美團餓了麼城市選擇,銀行app中銀行列表選擇,通訊錄中快速定位到聯絡人選擇的錨點位置等這樣的功能,作為剛入門不久的我來說,感覺這個功能還是有一點壓力。下面我來分享一下我所查到的一些實現方法。

什麼是錨點問題

對於pc端網頁來說,常見的網頁右側的回到頂部按鈕,點選直接跳轉到網頁最上面,就是錨點的實現;

對於移動端來說,開啟你手機的通訊錄,點選右側的字母,頁面直接跳轉到對應字母的聯絡人,這也是錨點的實現。

常見的解決方法

1.<a>標籤中href屬性設定為跳轉元素的id的值

<style>
    #mydiv{
      height: 1200px;
      width: 100%;
      background-color: pink;
      position: relative;
    }
    a{
      position: absolute;
      top: 1000px;
      left: 1000px;
    }
   </style>
  <div id="mydiv">
    我是網頁頂部
  </div>
  <a href="#mydiv" rel="external nofollow" >回到頂部</a>

上面的辦法相當於設定一個超連結,a標籤直接跳轉,但是這樣回改變瀏覽器位址列中的地址,感覺不太實用

2.原生js獲取滾動條位置,並作出改變scrollTop

<style>
    body{
      position: relative;
    }
    h1{
      margin: 0 auto;
    }
    .mybtn1{
      position: fixed;
      left: 200px;
      top: 500px;
    }
    .mybtn2{
      position: fixed;
      left: 200px;
      top: 550px;
    }
  </style>
  <body>
     <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>
  <script>
   function toTop(){
    var topH1 = document.getElementById("topH1")
    document.documentElement.scrollTop=topH1.offsetTop 
    window.pageYOffset=topH1.offsetTop 
    document.body.scrollTop=topH1.offsetTop ;
    
   }
  </script> 
  </body>

這種方法就是給按鈕新增點選事件,觸發點選事件後改變滾動條位置,但是這種辦法需要處理相容型問題比較麻煩,pc端移動端親測有效。

3.element.scrollIntoview使得滾動條根據檢視發生變化

<style>
    body{
      position: relative;
    }
    .mydiv{
      margin-top: 100px;
      border: 1px solid pink;
    }
    h1{
      margin: 0 auto;
    }
    .mybtn1{
      position: fixed;
      left: 200px;
      top: 500px;
    }
    .mybtn2{
      position: fixed;
      left: 200px;
      top: 550px;
    }
</style>
<body>
  <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>
  <script>
    window.onload=function(){

    }
  // 呼叫方法為element.scrollIntoview()
  //引數為true時,頁面或者容器發生滾動,使得element的頂部與檢視容器頂部對齊
  //引數為false時,使得element的底部與檢視容器底部對齊
    function toTop(){
      var topH1 = document.getElementById('topH1')
      topH1.scrollIntoView(true)
    }
    function toBtm() {
      var tobtmH1 = document.getElementById('tobtmH1')
      tobtmH1.scrollIntoView(false)
    }
  </script> 
</body>

上面這種方法是將錨點跳轉到檢視的頂部或者底部,沒有太多弊端,pc端移動端親測有效。

進階的解決方法

進階的方法就是呼叫第三發外掛better-scroll,這種方法還沒有親測,檢視資料也沒有太多的坑,需要的自己新增使用下。

以上就是JavaScript 獲取滾動條位置並將頁面滑動到錨點的詳細內容,更多關於JavaScript 滾動條滑動到錨點的資料請關注我們其它相關文章!