vue實現(xiàn)錨點跳轉(zhuǎn)scrollIntoView()使用案例
vue實現(xiàn)錨點跳轉(zhuǎn):scrollIntoView()
說明:
滾動到某個特定元素 :scrollIntoView();例如form表單或者div滾動到底部,
document.getElementsByClassName(‘’)或者document.getElementsById(‘’)
獲取到元素后即可實現(xiàn)回到可視化區(qū)域(也可理解為回到頂部)。
使用案例:
<div> v-for="(value,index) in data" class="roll">{{...}}</div> js部分
methods:{
scrollToPosition(index){
document.getElementsByClassName('roll')[index].scrollIntoView()
}這樣就利用scrollIntoView()簡單實現(xiàn)了一個錨點跳轉(zhuǎn),下邊講解scrollIntoView中的一些屬性:
scrollIntoView(true)相等于scrollIntoView();元素的頂端將和其所在滾動區(qū)的可視區(qū)域的頂端對齊為true時相應(yīng)的 scrollIntoViewOptions: {block: “start”, inline:“nearest”}。這是這個參數(shù)的默認(rèn)值。
scrollIntoView(false)元素的底端將和其所在滾動區(qū)的可視區(qū)域的底端對齊為false時相應(yīng)的scrollIntoViewOptions: {block: “end”, inline: “nearest”}。
同時他的參數(shù)也可以配置成一個object對象
scrollIntoView({
behavior:auto //定義動畫過渡效果"auto"或 "smooth" 之一。默認(rèn)為 "auto"。
block:start//定義垂直方向的對齊, "start", "center", "end", 或 "nearest"之一。默認(rèn)為 "start"。
inline:nearest//"start", "center", "end", 或 "nearest"之一。默認(rèn)為 "nearest"。
})其中smooth是平滑滾動 start和end是目標(biāo)滾動到的位置
注意:兼容性的問題多數(shù)主流瀏覽器已經(jīng)支持其基本功能,也就是說,使用true,false兩個參數(shù),來實現(xiàn)木訥的定位(沒有滾動動畫)是沒有任何問題的,但是傳入object參數(shù)時,IE各種版本會直接忽略,全部看成true參數(shù)屬性,如果想看到滾動動畫,使用火狐和chrome。
vue錨點跳轉(zhuǎn)的三種方式(頁內(nèi)跳轉(zhuǎn),跨頁跳轉(zhuǎn),函數(shù)跳轉(zhuǎn))
1.需求
最近遇到一個需求,需要從一個頁面跳到另一個頁面的指定錨點,如果是頁面上的錨點還簡單,但是那個錨點在頁面的組件里面。所以稍微研究了一下
2.跳轉(zhuǎn)錨點的基本方式
2.1 頁面內(nèi)通過點擊來跳轉(zhuǎn)
即添加一個a標(biāo)簽,href以#開頭,然后在需要跳轉(zhuǎn)的地方添加一個element,id設(shè)置為a標(biāo)簽href屬性相同的值,只是不要#,就可以了,這是最簡單的方式
<a href="#miao">去找喵星人</a> <h3 id="miao">喵星人基地</h3>
2.2 從A頁面跳轉(zhuǎn)到B頁面的指定錨點(錨點就在頁面上,不在子組件中)
我用的vue,所以在vue路由跳轉(zhuǎn)時只要在path后面加上#錨點就可以了,比如我要跳到B頁面id為miao的錨點,那么path=xxxx?#miao,當(dāng)遇到query參數(shù)的情況,將#miao放到url的最后就行了,其他的也一樣,反正只要把錨點放在url最后就行了,然后進行跳轉(zhuǎn)即可
?this.$router.push({
? ? ? ? ? ? path: `/detail?#miao`,
? ? ? ? ? ? query: {
? ? ? ? ? ? ? comment: `${commentId}`
? ? ? ? ? ? }
? ? ? ? ? })注意:因為默認(rèn)的vue單頁使用的是hash模式,以#作為路由分割標(biāo)識符,就會導(dǎo)致有歧義而無法正常達到需求,如果你又不想使用history模式,那么就使用2.3的方式,使用代碼進行錨點跳轉(zhuǎn)
2.3 直接使用代碼進行錨點跳轉(zhuǎn)
有的情況,只能使用代碼進行錨點跳轉(zhuǎn),比如從一個頁面跳到另一頁面子組件內(nèi)的指定錨點,這與2.2還是有區(qū)別的,我已經(jīng)試過,如果錨點在子組件內(nèi),不在當(dāng)前路由頁面中,那么2.2的方式并不會起作用。解決方法:
將錨點作為query屬性,或者其他的方式,將錨點的值傳給B頁面,然后B頁面再通過props的方式傳給他的子組件,最后在子組件中使用代碼進行錨點跳轉(zhuǎn)
// 這是傳到組件中的數(shù)據(jù)
?props: {
? ? ? commentId: String
? }
? mounted () {
? // 判斷commentId 是否有值,如果沒有的話,就不進行跳轉(zhuǎn),我這里就用'null'來判斷了,你們隨意
? // document.querySelector用來獲取element,有個坑,id值不能全為數(shù)字,否則報錯,所以我在id值前面加了id,id格式大致是:id123456
? // scrollIntoView就是用來跳轉(zhuǎn)到錨點的函數(shù)
? ? ? ? if (this.commentId !== 'null') {
? ? ? ? ? let inter = setInterval(() => {
? ? ? ? ? ? let target = document.querySelector(`#id${this.commentId}`)
? ? ? ? ? ? if (target) {
? ? ? ? ? ? ? clearInterval(time)
? ? ? ? ? ? ? target.scrollIntoView()
? ? ? ? ? ? }
? ? ? ? ? },100)
? ? ? ? }
? ? },到此這篇關(guān)于vue實現(xiàn)錨點跳轉(zhuǎn) scrollIntoView()的文章就介紹到這了,更多相關(guān)vue錨點跳轉(zhuǎn) scrollIntoView()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3性能優(yōu)化之首屏優(yōu)化實戰(zhàn)指南
這篇文章主要為大家詳細(xì)介紹了Vue3中進行首屏優(yōu)化的相關(guān)方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以參考一下2025-07-07
Vue.js如何利用v-for循環(huán)生成動態(tài)標(biāo)簽
這篇文章主要給大家介紹了關(guān)于Vue.js如何利用v-for循環(huán)生成動態(tài)標(biāo)簽的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-01-01

