当前位置:首页 > VUE

vue 实现引导页

2026-03-30 01:27:34VUE

使用Vue实现引导页的方法

使用第三方库vue-tour

安装vue-tour库:

npm install vue-tour

在main.js中引入并注册:

vue 实现引导页

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

Vue.use(VueTour)

在组件中使用:

<template>
  <v-tour name="myTour" :steps="steps"></v-tour>
</template>

<script>
export default {
  data() {
    return {
      steps: [
        {
          target: '#step1',
          content: '这是第一步的说明'
        },
        {
          target: '.step2',
          content: '这是第二步的说明'
        }
      ]
    }
  },
  mounted() {
    this.$tours['myTour'].start()
  }
}
</script>

自定义实现引导页

创建引导组件:

vue 实现引导页

<template>
  <div class="guide-overlay" v-if="isShow">
    <div class="guide-mask"></div>
    <div class="guide-content" :style="contentStyle">
      <div class="guide-text">{{ currentStep.text }}</div>
      <button @click="nextStep">下一步</button>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    steps: Array,
    isShow: Boolean
  },
  data() {
    return {
      currentIndex: 0
    }
  },
  computed: {
    currentStep() {
      return this.steps[this.currentIndex]
    },
    contentStyle() {
      const target = document.querySelector(this.currentStep.target)
      if (target) {
        const rect = target.getBoundingClientRect()
        return {
          top: `${rect.top}px`,
          left: `${rect.left}px`
        }
      }
      return {}
    }
  },
  methods: {
    nextStep() {
      if (this.currentIndex < this.steps.length - 1) {
        this.currentIndex++
      } else {
        this.$emit('close')
      }
    }
  }
}
</script>

<style>
.guide-overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 9999;
}
.guide-mask {
  position: absolute;
  width: 100%;
  height: 100%;
  background: rgba(0,0,0,0.5);
}
.guide-content {
  position: absolute;
  background: white;
  padding: 10px;
  border-radius: 4px;
}
</style>

使用Driver.js库

安装Driver.js:

npm install driver.js

在组件中使用:

<template>
  <button @click="startTour">开始引导</button>
</template>

<script>
import Driver from 'driver.js'
import 'driver.js/dist/driver.min.css'

export default {
  methods: {
    startTour() {
      const driver = new Driver()
      driver.defineSteps([
        {
          element: '#step1',
          popover: {
            title: '第一步',
            description: '这是第一步的说明',
            position: 'bottom'
          }
        },
        {
          element: '.step2',
          popover: {
            title: '第二步',
            description: '这是第二步的说明',
            position: 'top'
          }
        }
      ])
      driver.start()
    }
  }
}
</script>

注意事项

  • 确保引导元素在DOM中存在
  • 对于动态加载的内容,需要在内容加载完成后启动引导
  • 可以通过localStorage记录用户是否已完成引导
  • 移动端需要考虑响应式布局和触摸事件
  • 提供跳过和上一步的按钮增强用户体验

标签: vue
分享给朋友:

相关文章

vue实现suspense

vue实现suspense

Vue 3 中实现 Suspense Suspense 是 Vue 3 引入的一个内置组件,用于处理异步依赖的加载状态。它允许在等待异步组件或异步数据加载时显示一个后备内容(fallback),直到异…

vue 实现筛选

vue 实现筛选

实现筛选功能的基本方法 在Vue中实现筛选功能通常涉及以下几个核心步骤: 数据绑定与筛选逻辑 使用v-model绑定筛选条件到Vue实例的数据属性,结合计算属性实现动态筛选: data() {…

vue实现编辑

vue实现编辑

Vue 实现编辑功能 在 Vue 中实现编辑功能通常涉及表单绑定、状态管理和事件处理。以下是一个常见的实现方法: 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定: <i…

vue实现portal

vue实现portal

Vue 实现 Portal 功能 Portal 是一种将子节点渲染到父组件 DOM 层级之外的 DOM 节点的技术,常用于实现模态框、弹出层等需要脱离当前组件层级的场景。Vue 可以通过多种方式实现…

vue实现computed

vue实现computed

Vue 中 computed 的实现原理 computed 属性是 Vue 的一个核心特性,它基于响应式依赖进行缓存,仅在依赖发生变化时重新计算。以下是 computed 的实现方式: 基本用法 在…

vue实现动态禁用

vue实现动态禁用

动态禁用表单元素或按钮 在Vue中实现动态禁用功能通常通过v-bind:disabled(或简写为:disabled)绑定一个响应式变量实现。当变量值为true时,元素被禁用;为false时启用。…