JavaScript 獲取滾動(dòng)條位置并將頁(yè)面滑動(dòng)到錨點(diǎn)
前言
這篇來記錄下最近工作中遇到的一個(gè)問題,在app原生和前端h5混合開發(fā)的過程中,其中一個(gè)頁(yè)面是選擇城市列表的頁(yè)面,類似于美團(tuán)餓了么城市選擇,銀行app中銀行列表選擇,通訊錄中快速定位到聯(lián)系人選擇的錨點(diǎn)位置等這樣的功能,作為剛?cè)腴T不久的我來說,感覺這個(gè)功能還是有一點(diǎn)壓力。下面我來分享一下我所查到的一些實(shí)現(xiàn)方法。
什么是錨點(diǎn)問題
對(duì)于pc端網(wǎng)頁(yè)來說,常見的網(wǎng)頁(yè)右側(cè)的回到頂部按鈕,點(diǎn)擊直接跳轉(zhuǎn)到網(wǎng)頁(yè)最上面,就是錨點(diǎn)的實(shí)現(xiàn);
對(duì)于移動(dòng)端來說,打開你手機(jī)的通訊錄,點(diǎn)擊右側(cè)的字母,頁(yè)面直接跳轉(zhuǎn)到對(duì)應(yīng)字母的聯(lián)系人,這也是錨點(diǎn)的實(shí)現(xiàn)。
常見的解決方法
1.<a>標(biāo)簽中href屬性設(shè)置為跳轉(zhuǎn)元素的id的值
<style> #mydiv{ height: 1200px; width: 100%; background-color: pink; position: relative; } a{ position: absolute; top: 1000px; left: 1000px; } </style> <div id="mydiv"> 我是網(wǎng)頁(yè)頂部 </div> <a href="#mydiv" rel="external nofollow" >回到頂部</a>
上面的辦法相當(dāng)于設(shè)置一個(gè)超鏈接,a標(biāo)簽直接跳轉(zhuǎn),但是這樣回改變?yōu)g覽器地址欄中的地址,感覺不太實(shí)用
2.原生js獲取滾動(dòng)條位置,并作出改變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>
這種方法就是給按鈕添加點(diǎn)擊事件,觸發(fā)點(diǎn)擊事件后改變滾動(dòng)條位置,但是這種辦法需要處理兼容型問題比較麻煩,pc端移動(dòng)端親測(cè)有效。
3.element.scrollIntoview使得滾動(dòng)條根據(jù)視圖發(fā)生變化
<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(){ } // 調(diào)用方法為element.scrollIntoview() //參數(shù)為true時(shí),頁(yè)面或者容器發(fā)生滾動(dòng),使得element的頂部與視圖容器頂部對(duì)齊 //參數(shù)為false時(shí),使得element的底部與視圖容器底部對(duì)齊 function toTop(){ var topH1 = document.getElementById('topH1') topH1.scrollIntoView(true) } function toBtm() { var tobtmH1 = document.getElementById('tobtmH1') tobtmH1.scrollIntoView(false) } </script> </body>
上面這種方法是將錨點(diǎn)跳轉(zhuǎn)到視圖的頂部或者底部,沒有太多弊端,pc端移動(dòng)端親測(cè)有效。
進(jìn)階的解決方法
進(jìn)階的方法就是調(diào)用第三發(fā)插件better-scroll,這種方法還沒有親測(cè),查看資料也沒有太多的坑,需要的自己添加使用下。
以上就是JavaScript 獲取滾動(dòng)條位置并將頁(yè)面滑動(dòng)到錨點(diǎn)的詳細(xì)內(nèi)容,更多關(guān)于JavaScript 滾動(dòng)條滑動(dòng)到錨點(diǎn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript提升性能的常用技巧總結(jié)【經(jīng)典】
這篇文章主要介紹了JavaScript提升性能的常用技巧,結(jié)合實(shí)例形式總結(jié)分析了JavaScript編程中常見的性能提升優(yōu)化技巧,涉及作用域、循環(huán)、變量、DOM及函數(shù)節(jié)流等,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2016-06-06JS實(shí)現(xiàn)滑動(dòng)菜單效果代碼(包括Tab,選項(xiàng)卡,橫向等效果)
這篇文章主要介紹了JS實(shí)現(xiàn)滑動(dòng)菜單效果代碼,以實(shí)例形式實(shí)現(xiàn)了包括Tab,選項(xiàng)卡,橫向等效果,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-09-09JS 實(shí)現(xiàn)獲取打開一個(gè)界面中輸入的值
JS 實(shí)現(xiàn)獲取打開一個(gè)界面中輸入的值,需要的朋友可以參考一下2013-03-03JavaScript編寫實(shí)現(xiàn)飛機(jī)大戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了JavaScript編寫實(shí)現(xiàn)飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05JS將數(shù)字轉(zhuǎn)換成三位逗號(hào)分隔的樣式(示例代碼)
本篇文章主要是對(duì)JS將數(shù)字轉(zhuǎn)換成三位逗號(hào)分隔的樣式(示例代碼)進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2014-02-02微信小程序如何同時(shí)獲取用戶信息和用戶手機(jī)號(hào)
小程序登錄是現(xiàn)在小程序里面很普遍的一個(gè)功能,因?yàn)楣俜教峁┑姆椒?可以一鍵獲取到用戶信息,一鍵拿到手機(jī)號(hào),這篇文章主要給大家介紹了關(guān)于微信小程序如何同時(shí)獲取用戶信息和用戶手機(jī)號(hào)的相關(guān)資料,需要的朋友可以參考下2021-08-08