Vue3网站用户引导功能【Intro.js】

news2024/11/23 22:13:29

一、介绍

Intro.js 是一个用于创建网站用户引导、功能介绍和教程的 JavaScript 库。它允许开发者通过步骤和提示突出显示网站上的特定元素,以帮助用户更好地了解和使用网站的功能。以下是 Intro.js 的一些关键特点和用法介绍:

更多Intro.js 功能网址:Intro.js Themes | Intro.js Docs

二、主要特点

  1. 用户引导: Intro.js 可以创建引导,引导用户在网站上执行特定的操作或了解关键功能。
  2. 步骤和提示: 可以定义引导中的每个步骤,并为每个步骤提供提示,包括标题、描述和位置。
  3. 高亮显示元素: Intro.js 允许高亮显示网站上的特定元素,使其在引导中更为突出。
  4. 导航按钮: 提供导航按钮,使用户能够在引导的步骤之间进行切换。
  5. 自定义样式: Intro.js 允许开发者自定义引导的样式,以匹配网站的设计风格。

三、代码实现

1.JS方式实现

(1)安装Intro.js插件

npm install intro.js --save // 使用npm安装

yarn add intro.js // 使用yarn安装

(2)引入Intro.js

import IntroJs from 'intro.js' // introjs库
import 'intro.js/introjs.css' // introjs默认css样式
// import 'intro.js/themes/introjs-modern.css' // introjs主题

(3)实现整体Vue引导

<template>
  <div class="container">
    <div id="one">引导111111</div>
    <div id="two">引导2222222</div>
  </div>
  <div id="finally">引导333333</div>
</template>
<script>
import IntroJs from 'intro.js' // introjs库
import 'intro.js/introjs.css' // introjs默认css样式
// import 'intro.js/themes/introjs-modern.css' // introjs主题
// introjs还提供了多种主题,可以通过以下方式引入
import 'intro.js/themes/introjs-dark.css' // introjs主题
import { nextTick, onMounted } from "vue";
export default {
  setup() {
    const initPageIntro = () => {
      // 引导图
      const allSteps = [
        {
          element: '#one', //这是添加引导的元素id
          intro: '引导一1111111111111111', //这是引导提示内容
          position: 'right' //这是引导位置
        },
        {
          element: '#two',
          intro: '引导二1111111111111111',
          position: 'left'
        },
        {
          element: '#finally',
          intro: '引导结束',
          position: 'top'
        }
      ]

      const curIntro = IntroJs()
      curIntro.setOptions({
        prevLabel: `上一步`,
        nextLabel: `下一步`,
        skipLabel: `跳过`,
        doneLabel: `完成`,
        tooltipPosition: `bottom` /* 引导说明框相对高亮说明区域的位置 */,
        hidePrev: `true`, // 隐藏第一步中的上一个按钮
        tooltipClass: `` /* 引导说明文本框的样式 */,
        highlightClass: `` /* 说明高亮区域的样式 */,
        exitOnOverlayClick: false /* 是否允许点击空白处退出 */,
        showStepNumbers: false /* 是否显示说明的数据步骤*/,
        keyboardNavigation: false /* 是否允许键盘来操作 */,
        showButtons: true /* 是否按键来操作 */,
        showBullets: true /* 是否使用点点点显示进度 */,
        showProgress: false /* 是否显示进度条 */,
        scrollToElement: true /* 是否滑动到高亮的区域 */,
        overlayOpacity: 0.6 /* 遮罩层的透明度 */,
        positionPrecedence: [`bottom`, `top`, `right`, `left`] /* 当位置选择自动的时候,位置排列的优先级 */,
        disableInteraction: false, /* 是否禁止与元素的相互关联 */
        hintPosition: 'top-middle',
        steps: allSteps
      })
      curIntro.oncomplete(() => {
        // 点击结束按钮后执行的事件
        console.log(`oncomplete`)
      })
      curIntro.onexit(() => {
        // 点击跳过按钮后执行的事件
        console.log(`onexit`)
      })
      curIntro.onchange(() => {
        // 点击下一步执行的事件
        console.log(`onchange`)
      })
      curIntro.start()
    }
    onMounted(() => {
      nextTick(() => {
        initPageIntro()
      })
    })
  }
}
</script>

1.TS封装方式实现

 (1)安装Intro.js插件

npm install intro.js --save // 使用npm安装

yarn add intro.js // 使用yarn安装

(2)创建TS文件进行封装

import introJs from 'intro.js'
import 'intro.js/introjs.css' // introjs默认css样式  
// import 'intro.js/themes/introjs-modern.css' // introjs主题

/**
 * @name: 新手指导
 * @param {String} pathname 当前页面的path
 * @param {Array} stepsArr 步骤内容(包括element、intro)
 * @return {*}
 */
export function intro(pathname: any, stepsArr: any) {
    let guideObj = JSON.parse(localStorage.getItem('introCache')) || {}
    if (!guideObj[pathname]) {
        guideObj[pathname] = '1'
        localStorage.setItem('guide', JSON.stringify(guideObj))
        introJs().setOptions({
            prevLabel: "上一步",
            nextLabel: "下一步",
            skipLabel: "✕",
            doneLabel: "完成",
            tooltipPosition: "bottom" /* 引导说明框相对高亮说明区域的位置 */,
            hidePrev: "true", // 隐藏第一步中的上一个按钮
            tooltipClass: "" /* 引导说明文本框的样式 */,
            highlightClass: "" /* 说明高亮区域的样式 */,
            exitOnOverlayClick: false /* 是否允许点击空白处退出 */,
            showStepNumbers: false /* 是否显示说明的数据步骤*/,
            keyboardNavigation: false /* 是否允许键盘来操作 */,
            showButtons: true /* 是否按键来操作 */,
            showBullets: true /* 是否使用点点点显示进度 */,
            showProgress: false /* 是否显示进度条 */,
            scrollToElement: true /* 是否滑动到高亮的区域 */,
            overlayOpacity: 0.6 /* 遮罩层的透明度 */,
            positionPrecedence: ["bottom", "top", "right", "left"] /* 当位置选择自动的时候,位置排列的优先级 */,
            disableInteraction: false, /* 是否禁止与元素的相互关联 */
            hintPosition: 'top-middle',
            steps: stepsArr
        }).start()
    }
}



(3)代码实现

<template>
  <div class="container">
    <div id="one">引导步骤1</div>
    <div id="two">引导步骤2</div>
  </div>
  <div id="finally">引导结束3333</div>
</template>
<script setup  lang="ts">
import { intro } from "./introJs.ts"
import { nextTick, onMounted } from "vue";

// 新手指导
const stepsArr = [{
  element: '#one', //这是添加引导的元素id
  intro: '引导步骤11111111111111111', //这是引导提示内容
  position: 'right' //这是引导位置
},
{
  element: '#two',
  intro: '步骤21111111111111111',
  position: 'left'
},
{
  element: '#finally',
  intro: '引导结束3333333',
  position: 'top'
}]
onMounted(() => {
  // nextTick(() => {
  // introTS(“路由”, “参数”) // 调用函数并传参
  intro(222221, stepsArr) // 调用函数并传参
  // })

})


</script>

额外:

可以提供其他的样式进行指引。可以直接导入下方样式路径即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1288255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图扑数字孪生压缩空气储能管控平台

压缩空气储能在解决可再生能源不稳定性和提供可靠能源供应方面具有重要的优势。压缩空气储能&#xff0c;是指在电网负荷低谷期将电能用于压缩空气&#xff0c;在电网负荷高峰期释放压缩空气推动汽轮机发电的储能方式。通过提高能量转换效率、增加储能密度、快速启动和调节能力…

电子编曲软件FL Studio2024汉化中文免费版下载

电子编曲需要什么软件&#xff1f;市面上的宿主软件都可以完成电子编曲的工作&#xff0c;主要适用电子音乐风格编曲的宿主软件有FL Studio、Ableton Live等。电子编曲需要什么基础&#xff1f;需要对于电子音乐足够熟悉、掌握基础乐理知识以及宿主软件的使用方法。 就我个人的…

Linux cgroup技术

cgroup 全称是 control group&#xff0c;顾名思义&#xff0c;它是用来做“控制”的。控制什么东西呢&#xff1f;当然是资源的使用了。 cgroup 定义了下面的一系列子系统&#xff0c;每个子系统用于控制某一类资源。 CPU 子系统&#xff0c;主要限制进程的 CPU 使用率。cpu…

王道数据结构课后代码题p175 06.已知一棵树的层次序列及每个结点的度,编写算法构造此树的孩子-兄弟链表。(c语言代码实现)

/* 此树为 A B C D E F G 孩子-兄弟链表为 A B E C F G D */ 本题代码如下 void createtree(tree* t, char a[], int degree[], int n) {// 为B数组分配内存tree* B (tree*)malloc(sizeof(tree) * n);int i 0;i…

CENTOS 7 添加黑名单禁止IP访问服务器

一、通过 firewall 添加单个黑名单 只需要把ip添加到 /etc/hosts.deny 文件即可&#xff0c;格式 sshd:$IP:deny vim /etc/hosts.deny# 禁止访问sshd:*.*.*.*:deny# 允许的访问sshd:.*.*.*:allowsshd:.*.*.*:allow 二、多次失败登录即封掉IP&#xff0c;防止暴力破解的脚本…

搞程序权益系统v1.1

继1.0出来后我就把antdui换成elem 新增号卡功能现在只支持对接号氪系统 大家问我这个程序到底有什么用&#xff0c;我这边已经在写和WordPress对接文件&#xff0c;到时候在WordPress网站打开该程序就可以把订单同步到你的程序里面去&#xff0c;当然自己有集成能力也可以到小…

FairGuard无缝兼容小米澎湃OS、ColorOS 14 、鸿蒙4!

随着移动互联网时代的发展&#xff0c;各大手机厂商为打造生态系统、构建自身的技术壁垒&#xff0c;纷纷投身自研操作系统。 而对于一款游戏安全产品&#xff0c;在不同操作系统下&#xff0c;是否能够无缝兼容并且提供稳定的、高强度的加密保护&#xff0c;成了行业的一大痛…

python笔记:dtaidistance

1 介绍 用于DTW的库纯Python实现和更快的C语言实现 2 DTW举例 2.1 绘制warping 路径 from dtaidistance import dtw from dtaidistance import dtw_visualisation as dtwvis import numpy as np import matplotlib.pyplot as plts1 np.array([0., 0, 1, 2, 1, 0, 1, 0, 0…

Redis 命令全解析之 String类型

文章目录 ⛄String 介绍⛄命令⛄对应 RedisTemplate API⛄应用场景 ⛄String 介绍 String 类型&#xff0c;也就是字符串类型&#xff0c;是Redis中最简单的存储类型。 其value是字符串&#xff0c;不过根据字符串的格式不同&#xff0c;又可以分为3类&#xff1a; ● string&…

javaScript(四):函数和常用对象

文章目录 1、函数介绍2、函数的作用3、函数语法4、常用对象&#xff1a;数组5、常用对象&#xff1a;String6、常用对象&#xff1a;自定义对象 1、函数介绍 函数是一段可重复使用的代码块&#xff0c;用于执行特定任务或计算并返回结果。 函数由以下几个要素组成&#xff1a; …

2024最新电脑系统清理软件哪个好用?

基本上&#xff0c;不管是win版还是Mac版的电脑&#xff0c;其装机必备就是一款电脑系统清理软件&#xff0c;就比如Mac&#xff0c;目前在市面上&#xff0c;电脑系统清理软件是非常多的。 对于不熟悉系统的用户来说&#xff0c;使用一些小众工具&#xff0c;往往很多用户都不…

Flask项目Day1,Flask常见第三方拓展包

拉项目 git clone https://gitee.com/hahaguai007/python-flask-mysql.git git clone 项目地址运行后即可获取项目 2.创建数据库 在MySQL中创建一个数据库&#xff0c;名字自己定&#xff0c;然后修改RealProject\settings.py里的SQLALCHEMY_DATABASE_URI&#xff0c;格式为 …

一部,即全部,十年超越之作一加12售价4299元起

2023 年 12 月 5 日&#xff0c;一加正式发布十年旗舰一加 12。作为一加十年超越之作&#xff0c;一加 12 秉持「产品力优先」理念&#xff0c;带来多项领先行业的首创技术。一加 12 全球首发拥有医疗级护眼方案和行业第一 4500nit 峰值亮度的 2K 东方屏&#xff0c;完整搭载 F…

【Intel/Altera】 全系列FPGA最新汇总说明,持续更新中

前言 2023年11月14日英特尔 FPGA中国技术日&#xff0c;Intel刚发布了新的FPGA系列&#xff0c;官网信息太多&#xff0c;我这里结合以前的信息&#xff0c;简单汇总更新一下&#xff0c;方便大家快速了解Intel/Altera FPGA家族。 目录 前言 Altera和Intel 型号汇总 1. Agi…

【五分钟】学会利用cv2.resize()函数实现图像缩放

引言 在numpy知识库&#xff1a;深入理解numpy.resize函数和数组的resize方法中&#xff0c;小编较为详细地探讨了numpy的resize函数背后的机理。从结果来看&#xff0c;numpy.resize函数并不适合对图像进行缩放操作。而opencv中的resize函数虽然和numpy的resize函数同名&…

Python爬虫技术:如何利用ip地址爬取动态网页

目录 一、引言 二、Python爬虫基础 三、动态网页结构分析 四、利用ip地址爬取动态网页 1、找到需要爬取的动态网页的URL结构 2、构造请求参数 3、发送请求并获取响应 4、解析响应内容 五、实例代码 六、注意事项 七、总结 一、引言 随着互联网的快速发展&#xff0…

调研37位程序员后,我不再因为AI而焦虑 feat.脑放电波

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 杜1- 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo Nixon 的毕业论文研究了37位程序员使用GPT 写代码的状态&#xff0c;我们邀请了懂编程 且 具备一定技术团队管理经验的科技乱炖朱峰、小…

数据结构第二次作业——递归、树、图【考点罗列//错题正解//题目解析】

目录 一、选择题 ——递归—— 1.【单选题】 ——递归的相关知识点 2.【单选题】——递归的应用 3.【单选题】——递归的实现结构 4.【单选题】——递归的执行与实现 5.【单选题】 ——递归算法 ——树—— 6.【单选题】 ——树的结构 *7.【单选题】——树的知识点 …

【Unity3D】Android打包报错AAPT2:xxx Linkxxx

Gradle Plugin 与Gradle版本不匹配问题 或 相关依赖库下载不完全问题&#xff1b; 使用镜像即可解决 也可以离线&#xff08;离线过于复杂 你能找到方法那最好是离线Maven) 仓库服务 找最新可用的镜像url&#xff0c;替换google()和jcenter()&#xff0c; 可以直接使用publ…

Ant Design、Element组件:时间日期选择器限制选择范围的几种场景及区别

目录 第一章 Ant Design时间日期选择器限制选择范围的几种场景 需求一&#xff1a;选择今天之前的日期&#xff08;分为包括今天以及不包括今天&#xff09; 需求二&#xff1a;设置选择今天之后的日期&#xff08;分为今天以及今天之后&#xff09; 需求三&#xff1a;设置…