vue實現錨點跳轉scrollIntoView()使用案例

目錄 vue實現錨點跳轉:scrollIntoView() 說明: 使用案例: vue錨點跳轉的三種方式(頁內跳轉,跨頁跳轉,函數跳轉) 1.需求 2.跳轉錨點的基本方式 2.1 頁面內通過點擊來跳轉 2.2 從A頁面跳
目錄
  • vue實現錨點跳轉:scrollIntoView()
    • 說明:
    • 使用案例:
  • vue錨點跳轉的三種方式(頁內跳轉,跨頁跳轉,函數跳轉)
    • 1.需求
    • 2.跳轉錨點的基本方式
      • 2.1 頁面內通過點擊來跳轉
      • 2.2 從A頁面跳轉到B頁面的指定錨點(錨點就在頁面上,不在子組件中)
      • 2.3 直接使用代碼進行錨點跳轉

vue實現錨點跳轉:scrollIntoView()

說明:

滾動到某個特定元素 :scrollIntoView();例如form表單或者div滾動到底部,

document.getElementsByClassName(‘’)或者document.getElementsById(‘’)

獲取到元素后即可實現回到可視化區域(也可理解為回到頂部)。

使用案例:

<div> v-for="(value,index) in data" class="roll">{{...}}</div>  

js部分

methods:{
  scrollToPosition(index){
     document.getElementsByClassName('roll')[index].scrollIntoView()
}

這樣就利用scrollIntoView()簡單實現了一個錨點跳轉,下邊講解scrollIntoView中的一些屬性:

scrollIntoView(true)相等于scrollIntoView();元素的頂端將和其所在滾動區的可視區域的頂端對齊為true時相應的 scrollIntoViewOptions: {block: “start”, inline:“nearest”}。這是這個參數的默認值。

scrollIntoView(false)元素的底端將和其所在滾動區的可視區域的底端對齊為false時相應的scrollIntoViewOptions: {block: “end”, inline: “nearest”}。

同時他的參數也可以配置成一個object對象

  scrollIntoView({
  behavior:auto //定義動畫過渡效果"auto"或 "smooth" 之一。默認為 "auto"。
  block:start//定義垂直方向的對齊, "start", "center", "end", 或 "nearest"之一。默認為 "start"。
  inline:nearest//"start", "center", "end", 或 "nearest"之一。默認為 "nearest"。
  })

其中smooth是平滑滾動 start和end是目標滾動到的位置

注意:兼容性的問題多數主流瀏覽器已經支持其基本功能,也就是說,使用true,false兩個參數,來實現木訥的定位(沒有滾動動畫)是沒有任何問題的,但是傳入object參數時,IE各種版本會直接忽略,全部看成true參數屬性,如果想看到滾動動畫,使用火狐和chrome。

vue錨點跳轉的三種方式(頁內跳轉,跨頁跳轉,函數跳轉)

1.需求

最近遇到一個需求,需要從一個頁面跳到另一個頁面的指定錨點,如果是頁面上的錨點還簡單,但是那個錨點在頁面的組件里面。所以稍微研究了一下

2.跳轉錨點的基本方式

2.1 頁面內通過點擊來跳轉

即添加一個a標簽,href以#開頭,然后在需要跳轉的地方添加一個element,id設置為a標簽href屬性相同的值,只是不要#,就可以了,這是最簡單的方式

<a >去找喵星人</a>
<h3 id="miao">喵星人基地</h3>

2.2 從A頁面跳轉到B頁面的指定錨點(錨點就在頁面上,不在子組件中)

我用的vue,所以在vue路由跳轉時只要在path后面加上#錨點就可以了,比如我要跳到B頁面id為miao的錨點,那么path=xxxx?#miao,當遇到query參數的情況,將#miao放到url的最后就行了,其他的也一樣,反正只要把錨點放在url最后就行了,然后進行跳轉即可

?this.$router.push({
? ? ? ? ? ? path: `/detail?#miao`,
? ? ? ? ? ? query: {
? ? ? ? ? ? ? comment: `${commentId}`
? ? ? ? ? ? }
? ? ? ? ? })

注意:因為默認的vue單頁使用的是hash模式,以#作為路由分割標識符,就會導致有歧義而無法正常達到需求,如果你又不想使用history模式,那么就使用2.3的方式,使用代碼進行錨點跳轉

2.3 直接使用代碼進行錨點跳轉

有的情況,只能使用代碼進行錨點跳轉,比如從一個頁面跳到另一頁面子組件內的指定錨點,這與2.2還是有區別的,我已經試過,如果錨點在子組件內,不在當前路由頁面中,那么2.2的方式并不會起作用。解決方法:
將錨點作為query屬性,或者其他的方式,將錨點的值傳給B頁面,然后B頁面再通過props的方式傳給他的子組件,最后在子組件中使用代碼進行錨點跳轉

// 這是傳到組件中的數據
?props: {
? ? ? commentId: String
? }
? mounted () {
? // 判斷commentId 是否有值,如果沒有的話,就不進行跳轉,我這里就用'null'來判斷了,你們隨意
? // document.querySelector用來獲取element,有個坑,id值不能全為數字,否則報錯,所以我在id值前面加了id,id格式大致是:id123456
? // scrollIntoView就是用來跳轉到錨點的函數
? ? ? ? if (this.commentId !== 'null') {
? ? ? ? ? let inter = setInterval(() => {
? ? ? ? ? ? let target = document.querySelector(`#id${this.commentId}`)
? ? ? ? ? ? if (target) {
? ? ? ? ? ? ? clearInterval(time)
? ? ? ? ? ? ? target.scrollIntoView()
? ? ? ? ? ? }
? ? ? ? ? },100)
? ? ? ? }
? ? },

到此這篇關于vue實現錨點跳轉?scrollIntoView()的文章就介紹到這了,更多相關vue錨點跳轉?scrollIntoView()內容請搜索技圈網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持技圈網!

【轉自:東臺網頁設計公司 http://www.1234xp.com/dongtai.html 復制請保留原URL】
聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 久久久久人妻精品一区三寸 | 最新亚洲春色av无码专区| 国产在线公开视频| 一级毛片无毒不卡直接观看| 水蜜桃免费视频| 国产在线a免费观看| loosiesaki| 最近中文字幕更新8| 北条麻妃一区二区三区av高清| 91九色蝌蚪porny| 日本三人交xxx69| 亚洲精品nv久久久久久久久久| 黄瓜视频官网下载免费版| 帅哥我要补个胎小说| 亚洲国产一成人久久精品| 久久精品国产一区二区三区| 精品国内自产拍在线视频 | 国产精品无码一区二区三级| 久久久久久久久久久久久久久| 波多野结衣mxgs-983| 国产亚洲日韩欧美一区二区三区| 99精品国产在热久久| 日本无吗免费一二区| 亚洲欧美日韩精品在线| 色婷婷中文字幕| 国产精品成人无码免费| 一级特黄录像在线观看| 最近中文字幕高清中文字幕无| 免费jlzzjlzz在线播放视频| 国产在线h视频| 天堂在线ww小说| 久久久久久久久久久久久久久| 欧美精品九九99久久在免费线| 国产AV无码专区亚洲AV琪琪| 天堂久久久久久中文字幕| 性欧美大战久久久久久久野外| 亚洲V欧美V国产V在线观看| 狼群视频在线观看www| 国产乱人伦偷精品视频不卡| 88国产精品欧美一区二区三区 | 亚洲视频免费在线播放|