最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue跳轉(zhuǎn)時(shí)根據(jù)url錨點(diǎn)(#xxx)實(shí)現(xiàn)頁(yè)面內(nèi)容定位的方法

 更新時(shí)間:2024年04月30日 08:44:43   作者:前端炒粉仔  
本前端仔在做頁(yè)面跳轉(zhuǎn)的時(shí)候,被要求跳轉(zhuǎn)到頁(yè)面時(shí)候,把對(duì)應(yīng)部分的內(nèi)容自動(dòng)滾動(dòng)到頂部,我一開(kāi)始想到的就是根據(jù)錨點(diǎn)<a href="#xxid">進(jìn)行處理,但是發(fā)現(xiàn)不太好實(shí)現(xiàn),于是便自己研究了一個(gè)比較取巧的方法,需要的朋友可以參考下

介紹

本前端仔在做頁(yè)面跳轉(zhuǎn)的時(shí)候,被要求跳轉(zhuǎn)到頁(yè)面時(shí)候,把對(duì)應(yīng)部分的內(nèi)容自動(dòng)滾動(dòng)到頂部~

我一開(kāi)始想到的就是根據(jù)錨點(diǎn)<a href="#xxid">進(jìn)行處理,但是發(fā)現(xiàn)不太好實(shí)現(xiàn)~

于是便自己研究了一個(gè)比較取巧的方法

一、實(shí)現(xiàn)原理

為了能夠方便處理這個(gè)跳轉(zhuǎn)邏輯,我首先就想要把定位的錨點(diǎn)放到 url 上面,

事實(shí)上很多網(wǎng)站都是這樣做的,比如掘金就是這樣做的:

http://m.fzitv.net/server/320459u0g.htm#heading-2

上面的鏈接中 # 后面拼接的就是定位的錨點(diǎn),這種就是給頁(yè)面對(duì)應(yīng)位置的標(biāo)簽添加 id 即可

但是我的項(xiàng)目要定位的地方在一個(gè)子組件的滾動(dòng)區(qū)域內(nèi),觸發(fā)不了這個(gè)自動(dòng)滾動(dòng)效果,不知道為啥~

于是我便使用 watch 進(jìn)行監(jiān)聽(tīng),如果發(fā)現(xiàn)url中存在錨點(diǎn),也就是#拼接的字符串,就根據(jù)這個(gè)字符串為id獲取對(duì)應(yīng)的元素,然后將其進(jìn)行滾動(dòng)~

二、代碼(vue3 setup)

1、首先在需要跳轉(zhuǎn)的頁(yè)面的父組件上進(jìn)行監(jiān)聽(tīng),最好是頁(yè)面框架組件,這樣這個(gè)監(jiān)聽(tīng)效果會(huì)一直存在:

import { watch, nextTick } from 'vue';
import { useRoute } from 'vue-router';

const route = useRoute();

// 監(jiān)聽(tīng)路由變化,滾動(dòng)到對(duì)應(yīng)位置
watch(() => route.hash, (newVal, oldVal) => {
    let hash = window.location.hash;
    // hash 刪除第一個(gè)字符(當(dāng)前項(xiàng)目是hsah模式)
    hash = hash.slice(1);
    if(hash.indexOf('#') != -1) {
        nextTick(() => {
            let id = hash.split('#')[1];
            id = decodeURIComponent(id);
            let el = document.getElementById(id);
            console.log('滾動(dòng)到:', id, el)
            if(el) {
                // 平滑滾動(dòng)
                setTimeout(() => {
                    el.scrollIntoView({behavior: 'smooth'});
                }, 0);
            }
        })
    }
})

由于我的項(xiàng)目路由是哈希模式,于是便先清除一個(gè)#,接著便獲取到錨點(diǎn)id,然后獲取對(duì)應(yīng)的標(biāo)簽,最后進(jìn)行滾動(dòng) 為啥使用setTimeout呢?因?yàn)関ue的數(shù)據(jù)更新會(huì)有延遲的,代碼并不會(huì)立即執(zhí)行,因此使用定時(shí)器把這次滾動(dòng)推遲到下一個(gè)事件循環(huán),確保成功觸發(fā)~

2、在對(duì)應(yīng)的子組件中,也就是滾動(dòng)容器組件,只需要給對(duì)應(yīng)的位置的標(biāo)簽添加 id 即可

3、使用方法,router 跳轉(zhuǎn):

import { useRouter } from 'vue-router';
const router = useRouter()

// 跳轉(zhuǎn)
router.push({ path: '/xxx/xxxxx', hash: '#位置'})

三、演示:

四、結(jié)束

到此這篇關(guān)于vue跳轉(zhuǎn)時(shí)根據(jù)url錨點(diǎn)(#xxx)實(shí)現(xiàn)頁(yè)面內(nèi)容定位的方法的文章就介紹到這了,更多相關(guān)vue根據(jù)url錨點(diǎn)定位內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決在vue的mounted中獲取對(duì)象為null問(wèn)題

    解決在vue的mounted中獲取對(duì)象為null問(wèn)題

    這篇文章主要介紹了解決在vue的mounted中獲取對(duì)象為null問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 通過(guò)vue方式實(shí)現(xiàn)二維碼掃碼功能

    通過(guò)vue方式實(shí)現(xiàn)二維碼掃碼功能

    這篇文章給大家介紹了通過(guò)vue的方式,實(shí)現(xiàn)掃碼功能,實(shí)現(xiàn)步驟分為兩步,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • element-ui中el-table不顯示數(shù)據(jù)的問(wèn)題解決

    element-ui中el-table不顯示數(shù)據(jù)的問(wèn)題解決

    這篇文章主要介紹了element-ui中el-table不顯示數(shù)據(jù)的問(wèn)題解決,這是最近在做列表首頁(yè)時(shí)遇到的一個(gè)問(wèn)題,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • element前端實(shí)現(xiàn)壓縮圖片的功能

    element前端實(shí)現(xiàn)壓縮圖片的功能

    本文主要介紹了element前端實(shí)現(xiàn)壓縮圖片的功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 記一次微信小程序與webviewH5通信的踩坑記錄

    記一次微信小程序與webviewH5通信的踩坑記錄

    uniapp開(kāi)發(fā)小程序的過(guò)程中主、分包有大小限制,隨著業(yè)務(wù)的增加,使用web-view加載H5的方式,往往純加載并不能滿足業(yè)務(wù)需求,這個(gè)時(shí)候就得了解小程序與H5的交互,這篇文章主要給大家介紹了關(guān)于微信小程序與webviewH5通信的踩坑記錄,需要的朋友可以參考下
    2024-07-07
  • Monorepo風(fēng)格的組件工程搭建示例詳解

    Monorepo風(fēng)格的組件工程搭建示例詳解

    這篇文章主要介紹了Monorepo風(fēng)格的組件工程搭建示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • vue里的data要用return返回的原因淺析

    vue里的data要用return返回的原因淺析

    這篇文章主要介紹了vue里的data要用return返回的原因淺析,需要的朋友可以參考下
    2019-05-05
  • vue項(xiàng)目實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的方法

    vue項(xiàng)目實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的方法

    這篇文章主要給大家分享的是vue項(xiàng)目實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的方法,vue-router是前端開(kāi)發(fā)中用來(lái)實(shí)現(xiàn)路由頁(yè)面跳轉(zhuǎn)的一個(gè)模塊。下面小編將帶來(lái)如何在已經(jīng)創(chuàng)建好的vue-router項(xiàng)目基礎(chǔ)下實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn),需要的朋友可以參考一下
    2021-11-11
  • vue+ESLint 配置保存 自動(dòng)格式化代碼

    vue+ESLint 配置保存 自動(dòng)格式化代碼

    這篇文章主要介紹了vue+ESLint 配置保存 自動(dòng)格式化代碼的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • vue登錄成功之后的token處理詳細(xì)步驟

    vue登錄成功之后的token處理詳細(xì)步驟

    Token是身份驗(yàn)證后服務(wù)端返回的令牌,常用于訪問(wèn)授權(quán)API和頁(yè)面權(quán)限校驗(yàn),Token數(shù)據(jù)可存儲(chǔ)在本地或Vuex中,本地存儲(chǔ)可實(shí)現(xiàn)數(shù)據(jù)持久化,這篇文章主要介紹了vue登錄成功之后的token處理詳細(xì)步驟,需要的朋友可以參考下
    2024-10-10

最新評(píng)論

信阳市| 南平市| 堆龙德庆县| 临安市| 新野县| 宁晋县| 鹤山市| 景东| 西畴县| 沈丘县| 广南县| 长阳| 仙桃市| 兴仁县| 津南区| 齐齐哈尔市| 临夏市| 福建省| 厦门市| 庆元县| 高州市| 定安县| 墨玉县| 扎囊县| 桃园县| 财经| 昌江| 哈巴河县| 安图县| 洪泽县| 泊头市| 库伦旗| 汽车| 林西县| 台北县| 萨嘎县| 吴堡县| 门源| 临潭县| 项城市| 盐山县|