vue實(shí)現(xiàn)錨點(diǎn)跳轉(zhuǎn)scrollIntoView()使用案例
vue實(shí)現(xiàn)錨點(diǎn)跳轉(zhuǎn):scrollIntoView()
說明:
滾動到某個(gè)特定元素 :scrollIntoView();例如form表單或者div滾動到底部,
document.getElementsByClassName(‘’)或者document.getElementsById(‘’)
獲取到元素后即可實(shí)現(xiàn)回到可視化區(qū)域(也可理解為回到頂部)。
使用案例:
<div> v-for="(value,index) in data" class="roll">{{...}}</div>
js部分
methods:{ scrollToPosition(index){ document.getElementsByClassName('roll')[index].scrollIntoView() }
這樣就利用scrollIntoView()簡單實(shí)現(xiàn)了一個(gè)錨點(diǎn)跳轉(zhuǎn),下邊講解scrollIntoView中的一些屬性:
scrollIntoView(true)相等于scrollIntoView();元素的頂端將和其所在滾動區(qū)的可視區(qū)域的頂端對齊為true時(shí)相應(yīng)的 scrollIntoViewOptions: {block: “start”, inline:“nearest”}。這是這個(gè)參數(shù)的默認(rèn)值。
scrollIntoView(false)元素的底端將和其所在滾動區(qū)的可視區(qū)域的底端對齊為false時(shí)相應(yīng)的scrollIntoViewOptions: {block: “end”, inline: “nearest”}。
同時(shí)他的參數(shù)也可以配置成一個(gè)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兩個(gè)參數(shù),來實(shí)現(xiàn)木訥的定位(沒有滾動動畫)是沒有任何問題的,但是傳入object參數(shù)時(shí),IE各種版本會直接忽略,全部看成true參數(shù)屬性,如果想看到滾動動畫,使用火狐和chrome。
vue錨點(diǎn)跳轉(zhuǎn)的三種方式(頁內(nèi)跳轉(zhuǎn),跨頁跳轉(zhuǎn),函數(shù)跳轉(zhuǎn))
1.需求
最近遇到一個(gè)需求,需要從一個(gè)頁面跳到另一個(gè)頁面的指定錨點(diǎn),如果是頁面上的錨點(diǎn)還簡單,但是那個(gè)錨點(diǎn)在頁面的組件里面。所以稍微研究了一下
2.跳轉(zhuǎn)錨點(diǎn)的基本方式
2.1 頁面內(nèi)通過點(diǎn)擊來跳轉(zhuǎn)
即添加一個(gè)a標(biāo)簽,href以#開頭,然后在需要跳轉(zhuǎn)的地方添加一個(gè)element,id設(shè)置為a標(biāo)簽href屬性相同的值,只是不要#,就可以了,這是最簡單的方式
<a href="#miao">去找喵星人</a> <h3 id="miao">喵星人基地</h3>
2.2 從A頁面跳轉(zhuǎn)到B頁面的指定錨點(diǎn)(錨點(diǎn)就在頁面上,不在子組件中)
我用的vue,所以在vue路由跳轉(zhuǎn)時(shí)只要在path后面加上#錨點(diǎn)就可以了,比如我要跳到B頁面id為miao的錨點(diǎn),那么path=xxxx?#miao,當(dāng)遇到query參數(shù)的情況,將#miao放到url的最后就行了,其他的也一樣,反正只要把錨點(diǎn)放在url最后就行了,然后進(jìn)行跳轉(zhuǎn)即可
?this.$router.push({ ? ? ? ? ? ? path: `/detail?#miao`, ? ? ? ? ? ? query: { ? ? ? ? ? ? ? comment: `${commentId}` ? ? ? ? ? ? } ? ? ? ? ? })
注意:因?yàn)槟J(rèn)的vue單頁使用的是hash模式,以#作為路由分割標(biāo)識符,就會導(dǎo)致有歧義而無法正常達(dá)到需求,如果你又不想使用history模式,那么就使用2.3的方式,使用代碼進(jìn)行錨點(diǎn)跳轉(zhuǎn)
2.3 直接使用代碼進(jìn)行錨點(diǎn)跳轉(zhuǎn)
有的情況,只能使用代碼進(jìn)行錨點(diǎn)跳轉(zhuǎn),比如從一個(gè)頁面跳到另一頁面子組件內(nèi)的指定錨點(diǎn),這與2.2還是有區(qū)別的,我已經(jīng)試過,如果錨點(diǎn)在子組件內(nèi),不在當(dāng)前路由頁面中,那么2.2的方式并不會起作用。解決方法:
將錨點(diǎn)作為query屬性,或者其他的方式,將錨點(diǎn)的值傳給B頁面,然后B頁面再通過props的方式傳給他的子組件,最后在子組件中使用代碼進(jìn)行錨點(diǎn)跳轉(zhuǎn)
// 這是傳到組件中的數(shù)據(jù) ?props: { ? ? ? commentId: String ? } ? mounted () { ? // 判斷commentId 是否有值,如果沒有的話,就不進(jìn)行跳轉(zhuǎn),我這里就用'null'來判斷了,你們隨意 ? // document.querySelector用來獲取element,有個(gè)坑,id值不能全為數(shù)字,否則報(bào)錯(cuò),所以我在id值前面加了id,id格式大致是:id123456 ? // scrollIntoView就是用來跳轉(zhuǎn)到錨點(diǎ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實(shí)現(xiàn)錨點(diǎn)跳轉(zhuǎn) scrollIntoView()的文章就介紹到這了,更多相關(guān)vue錨點(diǎn)跳轉(zhuǎn) scrollIntoView()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue中使用Scss實(shí)現(xiàn)配置、切換主題方式
這篇文章主要介紹了Vue中使用Scss實(shí)現(xiàn)配置、切換主題方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03Vue使用Axios和elementui實(shí)現(xiàn)查詢分頁功能
當(dāng)今的Web開發(fā)趨勢中,前后端分離已經(jīng)成為一種流行的架構(gòu)模式,它將前端和后端的開發(fā)分離開來,使得前端和后端可以獨(dú)立進(jìn)行開發(fā)和部署,本文給大家介紹了Vue使用Axios和elementui實(shí)現(xiàn)查詢分頁功能,需要的朋友可以參考下2024-06-06vue動態(tài)代理無須重啟項(xiàng)目解決方案詳解
這篇文章主要為大家介紹了vue動態(tài)代理無須重啟項(xiàng)目解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09詳解@Vue/Cli 3 Invalid Host header 錯(cuò)誤解決辦法
這篇文章主要介紹了詳解@Vue/Cli 3 Invalid Host header 錯(cuò)誤解決辦法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01前端配合后端實(shí)現(xiàn)Vue路由權(quán)限的方法實(shí)例
一開始我還以為vue的路由只能用在工程化的項(xiàng)目里面,其實(shí)不然,下面這篇文章主要給大家介紹了關(guān)于前端配合后端實(shí)現(xiàn)Vue路由權(quán)限的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05