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

vue2使用el-tag實(shí)現(xiàn)自定義菜單導(dǎo)航標(biāo)簽

 更新時(shí)間:2023年12月12日 10:57:42   作者:請(qǐng)叫我歐皇i  
這篇文章主要為大家詳細(xì)介紹了vue2如何使用el-tag實(shí)現(xiàn)自定義菜單導(dǎo)航標(biāo)簽,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

需求:使用el-tag寫(xiě)個(gè)菜單導(dǎo)航欄,點(diǎn)擊路由的時(shí)候就添加

功能:

  • 設(shè)置鼠標(biāo)橫向滾動(dòng)并且不展示滾動(dòng)條
  • 添加關(guān)閉其他、關(guān)閉左側(cè)、關(guān)閉右側(cè)、全部關(guān)閉標(biāo)簽功能
  • 單個(gè)標(biāo)簽刪除功能添加,固定標(biāo)簽不可刪除
  • 右鍵點(diǎn)擊展開(kāi)操作菜單欄
  • 設(shè)置個(gè)默認(rèn)固定的標(biāo)簽,比如首頁(yè)
  • 點(diǎn)擊標(biāo)簽后el-menu對(duì)應(yīng)路由激活

1.效果

1.1滾動(dòng)條效果如下

1.2標(biāo)簽操作如下

2.滾動(dòng)條代碼講解和實(shí)現(xiàn)

滾動(dòng)條我使用的是自定義指令實(shí)現(xiàn)的,給最外層的tag一個(gè)div包裹并且設(shè)置寬高和自定義指令

v-horizontal-scroll:自己寫(xiě)的不是系統(tǒng)自帶的,名字要和directives下horizontal-scroll的對(duì)應(yīng)不然監(jiān)聽(tīng)不到

 event.preventDefault();阻止默認(rèn)事件觸發(fā)

<div class="tabs-container" v-horizontal-scroll></div>
export default {
  directives: {
    "horizontal-scroll": {
      bind: function (el) {
        el.addEventListener("wheel", function (event) {
          event.preventDefault();
          el.scrollLeft += event.deltaY;
        });
      },
    },
  },
}
<style lang="scss" scoped>
.tabs-container {
  width: 100%;
  height: 100%;
  overflow-x: scroll;
  overflow-y: hidden;
  white-space: nowrap;
  display: flex;}
.tabs-container::-webkit-scrollbar {
  display: none;
}
</style>

3.主要代碼講解

完整代碼在最后,建議下載完整代碼后再看講解

3.1首先獲取到標(biāo)簽頁(yè)需要展示的數(shù)據(jù)

第一步,監(jiān)聽(tīng)路由,這個(gè)路由我寫(xiě)了el-menu通過(guò)點(diǎn)擊路由進(jìn)行監(jiān)聽(tīng),意思是如果是已有的路由那么就標(biāo)簽頁(yè)跳轉(zhuǎn)到對(duì)應(yīng)路由的標(biāo)簽,如果沒(méi)有,那么就添加標(biāo)簽。

  tagsData: [
        {
          title: "首頁(yè)",
          path: "/home",
        },
      ],

這個(gè)是固定的標(biāo)簽,首頁(yè)不能被刪除

  watch: {
    // 監(jiān)聽(tīng)當(dāng)前路由
    $route: {
      immediate: true,
      handler(val, oldval) {
        console.log(val, "路由");
        const bool = this.tagsData.find((item) => val.path == item.path);
        if (!bool) {
          this.tagsData.push({
            title: val.meta.title,
            path: val.path,
          });
        }
        console.log(this.tagsData, "路由地址");
      },
    },
    tagsData: {
      immediate: true,
      handler(val, oldval) {
        return;
      },
    },
  },

3.2標(biāo)簽樣式和標(biāo)簽屬性講解

1.:closable="index > 0":標(biāo)簽是否可以關(guān)閉,index>0也就是除了首頁(yè)外其他的標(biāo)簽都有個(gè)x,表示可以關(guān)閉

2.:effect="item.title == $route.meta.title ? 'dark' : 'plain'"控制標(biāo)簽點(diǎn)擊后的顏色改變,也就是主題改變

3.contextmenu.native.prevent監(jiān)聽(tīng)右鍵菜單點(diǎn)擊事件并且阻止默認(rèn)事件觸發(fā)

   <el-tag
      class="tag"
      size="medium"
      :closable="index > 0"
      v-for="(item, index) in tagsData"
      :key="item.path"
      @click="goPath(item.path)"
      @close="close(index)"
      :effect="item.title == $route.meta.title ? 'dark' : 'plain'"
      @contextmenu.native.prevent="rightClick($event, index)"
    >
      <i class="cir" v-show="item.title == $route.meta.title"></i
      >{{ item.title }}
    </el-tag>

樣式如下 也就是添加了個(gè)小圓點(diǎn)

  .tag {
    cursor: pointer;
    margin-right: 5px;
    height: 37px;
    line-height: 34px;
    font-size: 16px;
    .cir {
      width: 8px;
      height: 8px;
      margin-right: 4px;
      background-color: #fff;
      border-radius: 50%;
      display: inline-block;
    }
  }

3.3 el-tag事件代碼講解

點(diǎn)擊事件后,如果重復(fù)點(diǎn)擊會(huì)報(bào)錯(cuò),所以這邊我做了個(gè)判斷

    // 點(diǎn)擊標(biāo)簽跳轉(zhuǎn)
    goPath(path) {
      // 解決重復(fù)點(diǎn)擊會(huì)報(bào)錯(cuò),數(shù)據(jù)冗余
      if (path !== this.$route.path) {
        this.$router.push(path);
      }
      this.closeMenus();
    },

點(diǎn)擊關(guān)閉標(biāo)簽后對(duì)應(yīng)的路由肯定也得跟著跳轉(zhuǎn)啊,跳轉(zhuǎn)代碼如下 

    close(i) {
      if (
        this.tagsData[i].path == this.$route.path &&
        i !== this.tagsData.length - 1
      ) {
        // 直接跳轉(zhuǎn)到最后一項(xiàng)了
        this.$router.push(this.tagsData[this.tagsData.length - 1].path);
      } else if (i === this.tagsData.length - 1) {
        this.$router.push(this.tagsData[this.tagsData.length - 2].path);
      }
      // 關(guān)閉當(dāng)前項(xiàng),本質(zhì)上就是刪除tags的對(duì)應(yīng)項(xiàng)
      this.tagsData.splice(i, 1);
      this.closeMenus();
    },

3.4點(diǎn)擊關(guān)閉操作欄

點(diǎn)擊右鍵的時(shí)候打開(kāi)操作欄了,但是之后關(guān)閉掉,要關(guān)閉只能把isShowTagsMenu=false就行

  mounted() {
    // 給文檔添加點(diǎn)擊事件
    document.addEventListener("click", this.closeMenus);
  },
  methods: {
    // 關(guān)閉選擇菜單
    closeMenus() {
      this.isShowTagsMenu = false;
    },
}

4.完整代碼

完整代碼地址如下:

vue2自定義導(dǎo)航欄: vue2自定義導(dǎo)航欄并設(shè)置樣式 (gitee.com)

到此這篇關(guān)于vue2使用el-tag實(shí)現(xiàn)自定義菜單導(dǎo)航標(biāo)簽的文章就介紹到這了,更多相關(guān)vue2自定義菜單導(dǎo)航內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue3中cookie的詳細(xì)使用過(guò)程

    vue3中cookie的詳細(xì)使用過(guò)程

    近期做的項(xiàng)目比較雜,涉及到前端框架的工作,遇到了許多問(wèn)題,記錄一下這個(gè)比較棘手的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于vue3中cookie的詳細(xì)使用方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Vue組件實(shí)現(xiàn)卡片動(dòng)畫(huà)倒計(jì)時(shí)示例詳解

    Vue組件實(shí)現(xiàn)卡片動(dòng)畫(huà)倒計(jì)時(shí)示例詳解

    這篇文章主要介紹了Vue組件實(shí)現(xiàn)卡片動(dòng)畫(huà)倒計(jì)時(shí)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • vue基礎(chǔ)之模板和過(guò)濾器用法實(shí)例分析

    vue基礎(chǔ)之模板和過(guò)濾器用法實(shí)例分析

    這篇文章主要介紹了vue基礎(chǔ)之模板和過(guò)濾器用法,結(jié)合實(shí)例形式分析了vue模板與過(guò)濾器的功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-03-03
  • Vue調(diào)用后臺(tái)接口的實(shí)現(xiàn)方式

    Vue調(diào)用后臺(tái)接口的實(shí)現(xiàn)方式

    在Vue中調(diào)用后臺(tái)接口的方法主要有三種:使用axios庫(kù)、VueResource庫(kù)和fetchAPI,根據(jù)需求選擇合適的方式進(jìn)行網(wǎng)絡(luò)請(qǐng)求
    2025-12-12
  • Vue 3中的異步操作管理示例分析

    Vue 3中的異步操作管理示例分析

    在現(xiàn)代Web應(yīng)用開(kāi)發(fā)中,異步操作是常見(jiàn)的挑戰(zhàn),本文介紹了Vue3中管理多個(gè)異步操作的方法,幫助開(kāi)發(fā)者提高編碼效率和應(yīng)用性能,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Vue項(xiàng)目中npm?install卡住問(wèn)題解決的詳細(xì)指南

    Vue項(xiàng)目中npm?install卡住問(wèn)題解決的詳細(xì)指南

    這篇文章主要介紹了Vue項(xiàng)目中npm?install卡住問(wèn)題解決的相關(guān)資料,文中包括更換npm鏡像源、清除npm緩存、刪除.npmrc文件和升級(jí)Node.js版本,需要的朋友可以參考下
    2024-12-12
  • vue3中獲取dom元素和操作實(shí)現(xiàn)方法

    vue3中獲取dom元素和操作實(shí)現(xiàn)方法

    ref是Vue3中一個(gè)非常重要的功能,它可以用來(lái)獲取DOM節(jié)點(diǎn),從而實(shí)現(xiàn)對(duì)DOM節(jié)點(diǎn)的操作,下面這篇文章主要給大家介紹了關(guān)于vue3中獲取dom元素和操作實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • vue在響應(yīng)頭response中獲取自定義headers操作

    vue在響應(yīng)頭response中獲取自定義headers操作

    這篇文章主要介紹了vue在響應(yīng)頭response中獲取自定義headers操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • vue.js開(kāi)發(fā)環(huán)境安裝教程

    vue.js開(kāi)發(fā)環(huán)境安裝教程

    這篇文章主要為大家詳細(xì)介紹了vue.js開(kāi)發(fā)環(huán)境的安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Vue項(xiàng)目請(qǐng)求超時(shí)處理方式

    Vue項(xiàng)目請(qǐng)求超時(shí)處理方式

    這篇文章主要介紹了Vue項(xiàng)目請(qǐng)求超時(shí)處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評(píng)論

三亚市| 兰溪市| 贞丰县| 北宁市| 鄂伦春自治旗| 兴山县| 富平县| 许昌市| 东辽县| 南溪县| 博白县| 会同县| 抚顺县| 铜川市| 灵寿县| 云龙县| 常德市| 邓州市| 石景山区| 崇信县| 佛冈县| 越西县| 迁安市| 蒙山县| 阜新| 石狮市| 五峰| 遵义县| 磴口县| 山阳县| 通化市| 谷城县| 丰都县| 和田市| 罗城| 新丰县| 荣昌县| 札达县| 保亭| 栾城县| 东乡|