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

vue實(shí)現(xiàn)跨頁(yè)面定位錨點(diǎn)區(qū)域方式

 更新時(shí)間:2023年05月19日 10:09:29   作者:愿為浪漫渡此劫  
這篇文章主要介紹了vue實(shí)現(xiàn)跨頁(yè)面定位錨點(diǎn)區(qū)域方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

實(shí)際企業(yè)項(xiàng)目開(kāi)發(fā)中,如何基于Vue2,利用錨點(diǎn)實(shí)現(xiàn)元素區(qū)域滾動(dòng)定位

項(xiàng)目需求

  • 點(diǎn)擊左菜單,實(shí)現(xiàn)右邊內(nèi)容區(qū)域滾動(dòng)定位;
  • 管理頁(yè),可以預(yù)覽該頁(yè),并根據(jù)預(yù)覽內(nèi)容的id定位到滾動(dòng)區(qū)域;

需求分析并實(shí)現(xiàn)

需求一

點(diǎn)擊左菜單,實(shí)現(xiàn)右邊內(nèi)容區(qū)域滾動(dòng)定位

1、如果你使用的是ant-design Vue UI庫(kù),是可以使用自帶的錨點(diǎn)組件的

<template>
  <!-- 左邊菜單區(qū) -->
  <a-anchor :affix="false" :get-current-anchor="getCurrentAnchor">
  	<!-- 一級(jí)錨點(diǎn) -->
    <a-anchor-link href="#menu1" rel="external nofollow"  title="菜單一">   
      <!-- 二級(jí)錨點(diǎn) -->
      <a-anchor-link href="#menu2" rel="external nofollow"  title="菜單二" />
    </a-anchor-link>
  </a-anchor>
   <!-- 右邊內(nèi)容滾動(dòng)區(qū) -->
   <div id="menu1">菜單一的詳細(xì)內(nèi)容</div>
   <div id="menu2">菜單二的詳細(xì)內(nèi)容</div>
</template>
<script>
export default {
  methods: {
    // 默認(rèn)高亮的錨點(diǎn)
    getCurrentAnchor() {
      return '#menu1';
    },
  },
};
</script>

優(yōu)點(diǎn):

1、已經(jīng)封裝好的,方便使用

缺點(diǎn):

1、a-anchor組件,原理是類(lèi)似:a標(biāo)簽的href屬性值(href=“#menu”)和內(nèi)容區(qū)域id屬性值(<div id=‘menu’>)一致,實(shí)現(xiàn)錨點(diǎn)定位,但是,同時(shí)瀏覽器URL地址會(huì)拼接#id,對(duì)于Vue開(kāi)發(fā)的項(xiàng)目來(lái)說(shuō), 如果當(dāng)前頁(yè)面地址是 http://localhost:8080/#/since, 你點(diǎn)擊錨點(diǎn):菜單一,路徑就會(huì)變成: http://localhost:8080/#/menu1, 此時(shí)刷新頁(yè)面頁(yè)面跳轉(zhuǎn)失敗,頁(yè)面內(nèi)容丟失

2、缺點(diǎn)二就是無(wú)法實(shí)現(xiàn) 需求二,無(wú)法滿(mǎn)足在其他頁(yè)面 打開(kāi)該頁(yè)面,根據(jù)內(nèi)容id實(shí)現(xiàn),內(nèi)容區(qū)域滾動(dòng)

2、如果使用的是 Element UI, 該UI庫(kù)對(duì)于Vue2,來(lái)說(shuō)是沒(méi)有錨點(diǎn)相關(guān)的組件的,所以需要借助第三方插件 vue-scrollto

1、 npm install --save vue-scrollto
2、 在需要使用錨點(diǎn)的組件中:
var VueScrollTo = require('vue-scrollto');
3、給錨點(diǎn)添加點(diǎn)擊事件
var options = {
    container: '#container',
    easing: 'ease-in',
    lazy: false,
    offset: -60,
    force: true,
    cancelable: true,
    onStart: function(element) {
      // scrolling started
    },
    onDone: function(element) {
      // scrolling is done
    },
    onCancel: function() {
      // scrolling has been interrupted
    },
    x: false,
    y: true
}
VueScrollTo.scrollTo(element, duration, options)

gitHubvue-scrollto插件地址

缺點(diǎn):

親測(cè)無(wú)效,無(wú)法實(shí)現(xiàn),點(diǎn)擊左邊菜單,右側(cè)內(nèi)容滾動(dòng)

看了好多博主,有的需要在router.js路由文件處理,有的需要在組件實(shí)例中watch路由(router),好像都沒(méi)用

需求最終實(shí)現(xiàn)

利用scrollIntoView方法,同時(shí)實(shí)現(xiàn)需求一和需求二

1.實(shí)現(xiàn)需求一:點(diǎn)擊左菜單,實(shí)現(xiàn)右邊內(nèi)容區(qū)域滾動(dòng)定位(監(jiān)聽(tīng)路由)

// 1、在左菜單點(diǎn)擊事件中,實(shí)現(xiàn)如下代碼
點(diǎn)擊左菜單 當(dāng)前頁(yè)面路由拼接 search參數(shù)(菜單對(duì)應(yīng)的右邊內(nèi)容id)
// 2、在錨點(diǎn)頁(yè)面,監(jiān)聽(tīng)路由變化
監(jiān)聽(tīng)路由變化,獲取search參數(shù),
// 3、設(shè)置document.body.scrollTop    (document 和 this.$el 都可以)
document.body.scrollTop = this.$el.querySelector('#'+search參數(shù)).scrollIntoView()
// 最終代碼
 watch: {
    // 點(diǎn)擊左菜單路由可以監(jiān)聽(tīng)到 但是點(diǎn)擊欄目預(yù)覽  需要走mounted()
   $route(newRoute) {
     if (!newRoute.query.programId) return;
     // 點(diǎn)擊錨點(diǎn)  路由監(jiān)聽(tīng)不到
     // console.log(newRoute.params.programId,'newRoute.params.programId')
     let id = "program" + this.$route.query.programId;
     this.$nextTick(()=>{
       if(this.$el.querySelector(`#${id}`)) {
         // scrollIntoView  不能隨便添加參數(shù)  建議不要加任何參數(shù)
         document.body.scrollTop = this.$el.querySelector(`#${id}`).scrollIntoView();
       }
     });
     this.saveCurrentProgramId = newRoute.query.programId;
   },
 },

2.管理頁(yè),可以預(yù)覽該頁(yè),并根據(jù)預(yù)覽內(nèi)容的id定位到滾動(dòng)區(qū)域;(mounted()鉤子中實(shí)現(xiàn))

// 1、在錨點(diǎn)頁(yè)面,mounted()鉤子中,獲取search參數(shù)id
this.$router.query.id
監(jiān)聽(tīng)路由變化,獲取search參數(shù),
// 2、設(shè)置document.body.scrollTop
// document 和 this.$el 都可以
document.body.scrollTop = this.$el.querySelector('#'+search參數(shù)).scrollIntoView()
// 最終代碼
mounted() {
  let that = this;
  // id選擇器不能以數(shù)字開(kāi)頭 不能包含 / 等特殊字符
  setTimeout(function() {
    if(that.$route.query.programId) {
      let id = "program" + that.$route.query.programId;
      if(that.$el.querySelector(`#${id}`)) {
        // scrollIntoView  不能隨便添加參數(shù)  建議不要加任何參數(shù)
        document.body.scrollTop = that.$el.querySelector(`#${id}`).scrollIntoView();
      }
    }
  },1000)
}

scrollIntoView()方法文檔

注意:

  • scrollIntoView()方法最好不要添加任何參數(shù),加了參數(shù)有可能失效
  • id選擇器千萬(wàn)不能以數(shù)字開(kāi)頭,且不能包括 \ 等特殊字符(我為了拼接原先頁(yè)面的路徑和id,將內(nèi)容區(qū)域id熟悉寫(xiě)成:id=‘since/123’),此時(shí)會(huì)報(bào)錯(cuò):選擇器無(wú)效
  • this.$el后面不能使用getElementId類(lèi)似方法,只能使用querySelector類(lèi)似的方法
  • 元素渲染時(shí)期問(wèn)題,需要添加定時(shí)器和this.$nextTick(()=>()),來(lái)操作元素
  • 核心代碼:document.body.scrollTop = this.$el.querySelector(‘#’+search參數(shù)).scrollIntoView()

缺點(diǎn)

在Vue項(xiàng)目中,使用了document對(duì)象,雖然需求實(shí)現(xiàn)了,但是并不是最好的。如果你們有較好的方法可以評(píng)論區(qū)回復(fù)

題外話:

有的博主寫(xiě)的是:

document.body.scrollTop = this.$el.querySelector(selector).offsetTop

親測(cè)無(wú)效!

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue實(shí)現(xiàn)組件間通信的幾種方式(多種場(chǎng)景)

    Vue實(shí)現(xiàn)組件間通信的幾種方式(多種場(chǎng)景)

    本文主要介紹了Vue實(shí)現(xiàn)組件間通信的幾種方式,不同的場(chǎng)景使用不同的方式,基本滿(mǎn)足所有開(kāi)發(fā)場(chǎng)景中的通信需求,感興趣的可以了解一下
    2021-10-10
  • Vue高版本中一些新特性的使用詳解

    Vue高版本中一些新特性的使用詳解

    這篇文章主要介紹了Vue高版本中一些新特性的使用,需要的朋友可以參考下
    2018-09-09
  • vue3?證件識(shí)別上傳組件封裝功能

    vue3?證件識(shí)別上傳組件封裝功能

    證件圖片識(shí)別上傳根據(jù)業(yè)務(wù)需要,經(jīng)常涉及到證件上傳,例如身份證上傳、銀行卡、營(yíng)業(yè)執(zhí)照等信息,根據(jù)設(shè)計(jì)師的設(shè)計(jì),單獨(dú)封裝了一個(gè)上傳組件,這篇文章主要介紹了vue3?證件識(shí)別上傳組件封裝,需要的朋友可以參考下
    2023-05-05
  • 前端uniapp微信小程序跨域問(wèn)題的解決方法

    前端uniapp微信小程序跨域問(wèn)題的解決方法

    跨域指的是在瀏覽器中,當(dāng)一個(gè)網(wǎng)頁(yè)嘗試加載另一個(gè)不同域名(或協(xié)議、端口號(hào))下的資源時(shí)所面臨的限制,這篇文章主要給大家介紹了關(guān)于前端uniapp微信小程序跨域問(wèn)題的解決方法,需要的朋友可以參考下
    2024-08-08
  • vue3?v-bind="$attrs"繼承組件全部屬性的解決方案

    vue3?v-bind="$attrs"繼承組件全部屬性的解決方案

    這篇文章主要介紹了vue3?v-bind=“$attrs“?繼承組件全部屬性的解決方案,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Vue中的Strorage本地化存儲(chǔ)詳解

    Vue中的Strorage本地化存儲(chǔ)詳解

    這篇文章主要介紹了Vue中的Strorage本地化存儲(chǔ)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 詳解vue微信網(wǎng)頁(yè)授權(quán)最終解決方案

    詳解vue微信網(wǎng)頁(yè)授權(quán)最終解決方案

    這篇文章主要介紹了 詳解vue微信網(wǎng)頁(yè)授權(quán)最終解決方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • 基于vue實(shí)現(xiàn)swipe輪播組件實(shí)例代碼

    基于vue實(shí)現(xiàn)swipe輪播組件實(shí)例代碼

    本篇文章主要介紹了基于vue實(shí)現(xiàn)swipe輪播組件實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Vue指令實(shí)現(xiàn)OutClick的示例

    Vue指令實(shí)現(xiàn)OutClick的示例

    在一般業(yè)務(wù)中監(jiān)聽(tīng)的最多的就是 Click 事件,但是在一些業(yè)務(wù)比如 Alert 和 Pop 效果時(shí),需要監(jiān)聽(tīng)在元素外部的點(diǎn)擊來(lái)關(guān)閉彈窗。
    2020-11-11
  • Vue2.0點(diǎn)擊切換類(lèi)名改變樣式的方法

    Vue2.0點(diǎn)擊切換類(lèi)名改變樣式的方法

    今天小編就為大家分享一篇Vue2.0點(diǎn)擊切換類(lèi)名改變樣式的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08

最新評(píng)論

铁岭县| 新源县| 云林县| 宝应县| 五指山市| 怀化市| 榕江县| 含山县| 台北县| 中牟县| 西昌市| 马山县| 建始县| 鹤山市| 松潘县| 大安市| 台江县| 云林县| 丘北县| 红原县| 德州市| 文安县| 凉山| 陇南市| 美姑县| 香河县| 神木县| 南涧| 增城市| 铅山县| 阳泉市| 达日县| 内江市| 嫩江县| 江油市| 凌源市| 绿春县| 永泰县| 普安县| 馆陶县| 安陆市|