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

Vue Tour封裝實(shí)現(xiàn)統(tǒng)一的頁(yè)面引導(dǎo)組件

 更新時(shí)間:2025年05月18日 14:24:23   作者:前端碼農(nóng)小黃  
項(xiàng)目開(kāi)發(fā)過(guò)程中需要實(shí)現(xiàn)用戶引導(dǎo)功能,經(jīng)過(guò)調(diào)研發(fā)現(xiàn)一個(gè)好用的 Vue 插件 vue-tour,下面我們就來(lái)看看如何基于 vue-tour 封裝一個(gè)統(tǒng)一的引導(dǎo)組件吧

項(xiàng)目開(kāi)發(fā)過(guò)程中需要實(shí)現(xiàn)用戶引導(dǎo)功能,經(jīng)過(guò)調(diào)研發(fā)現(xiàn)一個(gè)好用的 Vue 插件 vue-tour,今天就來(lái)分享一下我是如何基于 vue-tour 封裝一個(gè)統(tǒng)一的引導(dǎo)組件,方便后續(xù)在多個(gè)頁(yè)面復(fù)用的。

第一步:安裝 vue-tour 插件

首先安裝:

npm install vue-tour

然后在項(xiàng)目的 main.js 中進(jìn)行全局注冊(cè):

import Vue from 'vue'
import VueTour from 'vue-tour'
import 'vue-tour/dist/vue-tour.css'

Vue.use(VueTour)

第二步:封裝統(tǒng)一引導(dǎo)組件

我們希望做到的效果是:不管哪個(gè)頁(yè)面需要引導(dǎo),只需要引入這個(gè)組件,傳入 name 和 steps,然后調(diào)用 start() 方法即可開(kāi)啟引導(dǎo)。

于是我們封裝了一個(gè)組件 v-tour-comp.vue,完整代碼如下:

<template>
  <div>
    <div v-if="showMask" class="mask"></div>
    <v-tour :name="name" :steps="steps">
      <template slot-scope="tour">
        <transition name="fade">
          <v-step
            v-if="tour.steps[tour.currentStep]"
            :key="tour.currentStep"
            :step="tour.steps[tour.currentStep]"
            :previous-step="tour.previousStep"
            :next-step="tour.nextStep"
            :stop="tour.stop"
            :skip="tour.skip"
            :is-first="tour.isFirst"
            :is-last="tour.isLast"
            :labels="tour.labels"
          >
          	<!-- 基于頁(yè)面需要自定義使用,不用的話可以不需要插槽 -->
            <template #content>
              <slot :tour="tour"></slot>
            </template>
            <template #actions>
              <slot name="action" :tour="tour"></slot>
            </template>
          </v-step>
        </transition>
      </template>
    </v-tour>
  </div>
</template>

<script>
export default {
  name: 'v-tour-comp',
  props: {
    name: String,
    steps: Array
  },
  data() {
    return {
      showMask: false
    }
  },
  created() {
    this.setStepsBefore()
  },
  methods: {
    setStepsBefore() {
      // 引導(dǎo)前判斷每一步的目標(biāo)元素是否存在,保證渲染的位置是正確的
      this.steps.forEach((item) => {
        item.before = () =>
          new Promise((resolve, reject) => {
            const el = document.querySelector(item.target)
            if (!el) {
              reject(new Error('找不到元素'))
              return
            }
            resolve()
          })
      })
    },
    start() {
      this.showMask = true
      this.$tours[this.name]?.start()
    },
    stop() {
      this.showMask = false
      this.$tours[this.name]?.stop()
    },
    previousStep() {
      this.$tours[this.name]?.previousStep()
    },
    nextStep() {
      this.$tours[this.name]?.nextStep()
    }
  }
}
</script>

<style scoped lang="scss">
.mask {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 9999;
  background-color: transparent;
}
</style>

核心邏輯說(shuō)明:

我們通過(guò) setStepsBefore 方法,確保每一步引導(dǎo)的目標(biāo) DOM 元素在頁(yè)面上是存在的;

對(duì)外暴露 start()、stop() 等方法,方便外部調(diào)用控制;

使用插槽 <slot> 提供自定義內(nèi)容和操作按鈕的能力;

加一個(gè) mask 遮罩層可以讓用戶更聚焦當(dāng)前引導(dǎo)區(qū)域(當(dāng)然你可以自定義背景色等樣式)。

第三步:在頁(yè)面中使用

在你需要引導(dǎo)的頁(yè)面中,只需要這樣用:

<template>
  <div>
    <div class="step-1">我是第一步</div>
    <div class="step-2">我是第二步</div>

    <v-tour-comp ref="tour" :name="'guide-demo'" :steps="tourSteps">
      <template #content="{ tour }">
        <div>{{ tour.steps[tour.currentStep].content }}</div>
      </template>
      <template #action="{ tour }">
        <button @click="tour.previousStep" v-if="!tour.isFirst">上一步</button>
        <button @click="tour.nextStep" v-if="!tour.isLast">下一步</button>
        <button @click="tour.stop">結(jié)束</button>
      </template>
    </v-tour-comp>
  </div>
</template>

<script>
import VTourComp from '@/components/v-tour-comp.vue'

export default {
  components: { VTourComp },
  data() {
    return {
      tourSteps: [
        {
          target: '.step-1',
          content: '這是第一步,介紹頁(yè)面某個(gè)功能'
        },
        {
          target: '.step-2',
          content: '這是第二步,繼續(xù)講解另一個(gè)部分'
        }
      ]
    }
  },
  mounted() {
    // 頁(yè)面加載后自動(dòng)觸發(fā)引導(dǎo)
    this.$nextTick(() => {
      this.$refs.tour.start()
    })
  }
}
</script>

結(jié)語(yǔ)

通過(guò)封裝這個(gè)組件,我們可以在項(xiàng)目中非常方便地添加用戶引導(dǎo),只需要:

  • 傳入 steps;
  • 引用組件;
  • 調(diào)用 start()

對(duì)于提升用戶上手效率、降低學(xué)習(xí)成本、增強(qiáng)產(chǎn)品友好性來(lái)說(shuō),這樣的小工具非常值得一試。

到此這篇關(guān)于Vue Tour封裝實(shí)現(xiàn)統(tǒng)一的頁(yè)面引導(dǎo)組件的文章就介紹到這了,更多相關(guān)Vue Tour頁(yè)面引導(dǎo)組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 通過(guò)fastclick源碼分析徹底解決tap“點(diǎn)透”

    通過(guò)fastclick源碼分析徹底解決tap“點(diǎn)透”

    這篇文章主要介紹了通過(guò)fastclick源碼分析徹底解決tap“點(diǎn)透”問(wèn)題的知識(shí)內(nèi)容,有興趣的朋友學(xué)習(xí)一下吧。
    2017-12-12
  • vue實(shí)現(xiàn)動(dòng)態(tài)路由的方法及路由原理解析

    vue實(shí)現(xiàn)動(dòng)態(tài)路由的方法及路由原理解析

    這篇文章主要介紹了路由原理及vue實(shí)現(xiàn)動(dòng)態(tài)路由,Vue Router 提供了豐富的 API,可以輕松地實(shí)現(xiàn)路由功能,并支持路由參數(shù)、查詢參數(shù)、命名路由、嵌套路由等功能,可以滿足不同應(yīng)用程序的需求,需要的朋友可以參考下
    2023-06-06
  • vue實(shí)現(xiàn)移動(dòng)端適方案的完整步驟

    vue實(shí)現(xiàn)移動(dòng)端適方案的完整步驟

    現(xiàn)在的手機(jī)五花八門,造就了移動(dòng)端窗口分辨率繁多的局面,在不同分辨率的屏幕下保持與UI圖一致的效果,就成了讓前端不得不頭疼的問(wèn)題,下面這篇文章主要給大家介紹了vue實(shí)現(xiàn)移動(dòng)端適方案的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • vue中vue-router的使用說(shuō)明(包括在ssr中的使用)

    vue中vue-router的使用說(shuō)明(包括在ssr中的使用)

    這篇文章主要介紹了vue中vue-router的使用說(shuō)明(包括在ssr中的使用),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 詳解如何在你的Vue項(xiàng)目配置vux

    詳解如何在你的Vue項(xiàng)目配置vux

    這篇文章主要介紹了詳解如何在你的Vue項(xiàng)目配置vux,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • 詳解如何在Vue3使用<script lang=“ts“ setup>語(yǔ)法糖

    詳解如何在Vue3使用<script lang=“ts“ setup>語(yǔ)法糖

    本文主要介紹了在Vue3使用<script lang=“ts“ setup>語(yǔ)法糖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Vue3?+?elementplus實(shí)現(xiàn)表單驗(yàn)證+上傳圖片+?防止表單重復(fù)提交功能

    Vue3?+?elementplus實(shí)現(xiàn)表單驗(yàn)證+上傳圖片+?防止表單重復(fù)提交功能

    這篇文章主要介紹了Vue3?+?elementplus?表單驗(yàn)證+上傳圖片+?防止表單重復(fù)提交,本文給大家展示效果圖和完整代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Vue3使用element-plus組件不顯示問(wèn)題

    Vue3使用element-plus組件不顯示問(wèn)題

    這篇文章主要介紹了Vue3使用element-plus組件不顯示問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 基于Vue3實(shí)現(xiàn)日歷組件的示例代碼

    基于Vue3實(shí)現(xiàn)日歷組件的示例代碼

    日歷在很多地方都可以使用的到,這篇文章主要介紹了如何利用vue3實(shí)現(xiàn)簡(jiǎn)單的日歷控件,文中通過(guò)示例代碼講解詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 基于Vue3和Plotly.js實(shí)現(xiàn)交互式3D圖

    基于Vue3和Plotly.js實(shí)現(xiàn)交互式3D圖

    這篇文章主要介紹了基于Vue3和Plotly.js實(shí)現(xiàn)交互式3D圖,本代碼旨在為數(shù)據(jù)可視化提供一個(gè)交互式圖表,允許用戶動(dòng)態(tài)控制圖表中線條的顏色和可見(jiàn)性,此功能對(duì)于探索大型數(shù)據(jù)集或突出特定數(shù)據(jù)子集非常有用,需要的朋友可以參考下
    2024-07-07

最新評(píng)論

自治县| 遂川县| 平谷区| 广元市| 沭阳县| 马边| 常宁市| 墨竹工卡县| 黄平县| 白银市| 嵊州市| 尼玛县| 鹿泉市| 张家川| 林口县| 潮安县| 金坛市| 资溪县| 平度市| 两当县| 桑日县| 东乡族自治县| 沙洋县| 梓潼县| 中方县| 集安市| 循化| 谢通门县| 二连浩特市| 孝义市| 遂平县| 枣庄市| 贵港市| 渑池县| 松江区| 罗江县| 唐山市| 辉南县| 通许县| 宜兰市| 新闻|