vue中遇到scrollIntoView無(wú)效問(wèn)題及解決
vue中遇到scrollIntoView無(wú)效
官方文檔寫的簡(jiǎn)單
Element 接口的scrollIntoView()方法會(huì)滾動(dòng)元素的父容器,使被調(diào)用scrollIntoView()的元素對(duì)用戶可見(jiàn)。
語(yǔ)法:
element.scrollIntoView(); // 等同于element.scrollIntoView(true) element.scrollIntoView(alignToTop);// Boolean型參數(shù) element.scrollIntoView(scrollIntoViewOptions);// Object型參數(shù)
首先容器滾動(dòng),然后document.geyElementById或者document.querySelector 獲取指定元素,最夠元素調(diào)用scrollIntoView.
參數(shù):
- alignToTop可選
一個(gè)Boolean值:
如果為true,元素的頂端將和其所在滾動(dòng)區(qū)的可視區(qū)域的頂端對(duì)齊。相應(yīng)的 scrollIntoViewOptions: {block: "start", inline: "nearest"}。這是這個(gè)參數(shù)的默認(rèn)值。
如果為false,元素的底端將和其所在滾動(dòng)區(qū)的可視區(qū)域的底端對(duì)齊。相應(yīng)的scrollIntoViewOptions: {block: "end", inline: "nearest"}。
- scrollIntoViewOptions 可選
一個(gè)包含下列屬性的對(duì)象:
- behavior 可選
定義動(dòng)畫過(guò)渡效果, "auto"或 "smooth"之一。默認(rèn)為"auto"。
- block 可選
定義垂直方向的對(duì)齊,"start","center","end", 或 "nearest"之一。默認(rèn)為 “start”。
- inline 可選
定義水平方向的對(duì)齊, "start", "center","end", 或 "nearest"之一。默認(rèn)為 “nearest”。
實(shí)際在vue項(xiàng)目中遇到,當(dāng)通過(guò)點(diǎn)擊事件調(diào)用子組件的元素滾動(dòng)到可視區(qū)域時(shí)怎樣都無(wú)效。
最終發(fā)現(xiàn),這個(gè)方法還有一個(gè)限制:需要頁(yè)面完全加載后再調(diào)用
這樣,在vue中可以使用$nextTick函數(shù),確保頁(yè)面已渲染完成在去調(diào)scrollIntoView使?jié)L動(dòng)到可視區(qū)域
實(shí)現(xiàn)代碼如下
父組件:
showDatePicker(){ ? if (this.$refs.pickers) { ? ? ? ? this.$nextTick(() => { ? ? ? ? ? this.$refs.pickers.showCurrentDate() ? ? ? ? }) ? ? ? }
子組件:
? showCurrentDate() { ? ? ? this.$el.querySelector('.active').scrollIntoView({ ? ? ? ? block: 'start', ? ? ? }) // 回到頂部 ? ? },
scrollIntoView在vue里失效---kalrry
Element.scrollIntoView() 方法讓當(dāng)前的元素滾動(dòng)到瀏覽器窗口的可視區(qū)域內(nèi)。
element.scrollIntoView(); // 等同于element.scrollIntoView(true) element.scrollIntoView(alignToTop); // Boolean型參數(shù) element.scrollIntoView(scrollIntoViewOptions); // Object型參數(shù)
參數(shù)
alignToTop: 一個(gè)boolean值 //true:等價(jià)于 scrollIntoViewOptions: {block: “start”, inline: “nearest”} //false:等價(jià)于scrollIntoViewOptions: {block: “end”, inline: “nearest”} scrollIntoViewOptions: 對(duì)象 behavior: 定義動(dòng)畫過(guò)度效果, ‘a(chǎn)uto / smooth' , 默認(rèn) ‘a(chǎn)uto' block:定義垂直方向的對(duì)齊, “start / center / end / nearest”。默認(rèn)為 “start”。 inline 定義水平方向的對(duì)齊, “start / center / end / nearest”。默認(rèn)為 “nearest”
問(wèn)題
按照js標(biāo)準(zhǔn)選擇元素方式,scrollIntoView在vue里失效
原因
該方法需在頁(yè)面完全加載后才能生效
解決
方法一:
利用setTimeout方法
?? ?setTimeout(function(){ ? ? ? ? document.getElementById(target).scrollIntoView(); ? ? ?},100)
方法二:
運(yùn)用vue中的this.$nextTick方法
?? ?this.$nextTick(()=>{ ?? ?//對(duì)象方式設(shè)置滾動(dòng)狀態(tài) ? ? ? ?document.querySelector("#01commonly").scrollIntoView({ ? ? ? ? ? block: 'end', ? ? ? ? ? behavior: 'smooth' ? ? ? ? }) ?? ?})
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nuxt.js實(shí)現(xiàn)一個(gè)SSR的前端博客的示例代碼
這篇文章主要介紹了Nuxt.js實(shí)現(xiàn)一個(gè)SSR的前端博客的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09ElementUI對(duì)table的指定列進(jìn)行合算
本文主要介紹了ElementUI對(duì)table的指定列進(jìn)行合算,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Vue調(diào)用PC攝像頭實(shí)現(xiàn)拍照功能
這篇文章主要為大家詳細(xì)介紹了Vue調(diào)用PC攝像頭實(shí)現(xiàn)拍照功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Vue 使用高德地圖添加點(diǎn)標(biāo)記 + 點(diǎn)擊地圖獲取坐標(biāo) + 帶搜索(即地
這篇文章主要介紹了Vue 使用高德地圖添加點(diǎn)標(biāo)記 + 點(diǎn)擊地圖獲取坐標(biāo) + 帶搜索(即地理編碼 + 逆地理編碼) 附完整示例,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-01-01Vue?打包優(yōu)化之externals抽離公共的第三方庫(kù)詳解
這篇文章主要為大家介紹了Vue?打包優(yōu)化之externals抽離公共的第三方庫(kù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-06-06公共組件父子依賴調(diào)用及子校驗(yàn)父條件問(wèn)題解決
這篇文章主要介紹了如何解決公共組件父子組件依賴調(diào)用和子組件校驗(yàn)父組件條件的問(wèn)題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10@vue/cli4.x版本的vue.config.js常用配置方式
這篇文章主要介紹了@vue/cli4.x版本的vue.config.js常用配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05