Vue + intro.js 实现页面新手引导流程功能

news2024/10/7 14:30:13

效果图:

 

 1、安装 intro.js 

npm install intro.js --save

2、在项目的 main.js 中,引入 intro.js 库和相关样式文件,如下:

// 首页引导插件
import intro from 'intro.js' // introjs库
import 'intro.js/introjs.css' // introjs默认css样式
// introjs还提供了多种主题,可以通过以下方式引入
import 'intro.js/themes/introjs-modern.css' // introjs主题

// 把intro.js加入到vue的prototype中,方便使用,就可以直接通过this.$intro()来调用了
Vue.prototype.$intro = intro

3、在 data 中配置初始数据,如下:

data(){
    return{
         introOption: { // 参数对象
            prevLabel: '上一步',
            nextLabel: '下一步',
            skipLabel: '跳过',
            doneLabel: '完成',
            tooltipClass: 'intro-tooltip', /* 引导说明文本框的样式 */
            // highlightClass: 'intro-highlight', /* 说明高亮区域的样式 */
            exitOnEsc: true, /* 是否使用键盘Esc退出 */
            exitOnOverlayClick: false, /* 是否允许点击空白处退出 */
            keyboardNavigation: true, /* 是否允许键盘来操作 */
            showBullets: false, /* 是否使用点显示进度 */
            showProgress: false, /* 是否显示进度条 */
            scrollToElement: true, /* 是否滑动到高亮的区域 */
            overlayOpacity: 0.5, // 遮罩层的透明度 0-1之间
            positionPrecedence: ['bottom', 'top', 'right', 'left'], /* 当位置选择自动的时候,位置排列的优先级 */
            disableInteraction: false, /* 是否禁止与元素的相互关联 */
            hidePrev: true, /* 是否在第一步隐藏上一步 */
            // hideNext: true, /* 是否在最后一步隐藏下一步 */
            steps: [], /* steps步骤,可以写个工具类保存起来 */
          },
          tipsImg1: require('./img/tips1.jpg'), // 新手引导的提示图片
          tipsImg2: require('./img/tips2.jpg') // 新手引导的提示图片
    }
}

4、在 methods 中配置方法,用以设置引导步数,如下:

methods: {
        initGuide() {
            // 绑定标签元素的选择器数组
            this.introOption.steps = [
                { title: '系统使用指导', element: '#step1', intro: `鼠标悬浮在各个功能模块上,可快速查找系统对应操作SOP以及运维人员。<img src="` + this.tipsImg1 + `" alt="" style="width: 200px;margin-top: 15px;"/>`},
                { title: '个人信息', element: '#step2', intro: `点击个人头像/下拉图标,选择个人信息,初始密码为******,建议修改为个人账号密码。<img src="` + this.tipsImg2 + `" alt="" style="width: 125px;margin-top: 15px;"/>`, },
                { title: '重新引导', element: '#step3', intro: '点击此处可重新查看引导流程。', },
            ]
            this.$intro()
                .setOptions(this.introOption)
                // 点击结束按钮后执行的事件
                .oncomplete(() => {
                    console.log('点击结束按钮后执行的事件')
                })
                // 点击跳过按钮后执行的事件
                .onexit(() => {
                    console.log('点击跳过按钮后执行的事件')
                })
                // 确认完毕之后执行的事件
                .onbeforeexit(() => {
                    console.log('确认完毕之后执行的事件')
                })
                .start()
        },
}

5、在 mounted 中调用方法,如下:

mounted() {
    this.$nextTick(() => {
        this.initGuide() // 调用新手引导的方法
    })
}

注意:
(1)上述代码中,initGuide() 方法里配置了指引步骤和开始指引;并在 mounted 生命周期中调用 initGuide() 方法以展示指引内容。需要注意的是,为确保指引信息在原始页面渲染完毕后调用,需要在 $nextTick() 中调用 initGuide() 方法。

(2)正常是可以在 mounted 中调用指引方法,但是如果你的指引块是通过接口渲染的,那么建议在接口请求成功之后调用指引方法,避免数据为请求成功,指引块无法正确选中。

6、重新查看新手指引的方法,如下:

// 重新查看引导
viewIntro(){
   this.initGuide()
},

说明:在标签添加点击事件 viewIntro() ,然后在事件中调用 this.initGuide() 方法即可。

7、页面标签绑定,如下:

<div id="step1">
    <div>这里边是你第一步需要指引所框选的内容</div>
</div>
<div id="step2">
    <div>这里边是你第二步需要指引所框选的内容</div>
</div>
<div id="step3">
    <div>这里边是你第三步需要指引所框选的内容</div>
</div>

<div class="new-tips" @click="viewIntro()">新人教程</div>

注意:标签上的 id 所对应的是 initGuide 方法中 element 的值,每一步都是通过这个 id 进行绑定的。

8、css 样式

<!-- 新手引导提示样式 -->
<style lang="scss">
.introjs-helperLayer{
    box-shadow: rgba(33, 33, 33, 0.8) 0px 0px 1px 0px, rgba(33, 33, 33, 0.5) 0px 0px 0px 5000px!important;
    border: 3px dashed #409eff;
}
.new-tips{
    color: #409eff;
    line-height: 80px;
    cursor: pointer;
}
.introjs-tooltip-title{
    font-size: 16px;
    width: 80%;
    padding-top: 10px;
}
.warper {
  width: 200px;
  height: 100px;
  line-height: 100px;
  text-align: center;
  border: 1px solid saddlebrown;
}
/* 重置引导组件样式(类似element-ui个人使用) */
.intro-tooltip {
  color: #ffff;
  background: #2c3e50;
}
/* 引导提示框的位置 */
.introjs-bottom-left-aligned {
  left: 45% !important;
}
.introjs-right,
.introjs-left {
  top: 30%;
}
.intro-highlight {
  background: rgba(255,255,255,0.5);
}
.introjs-arrow.left {
  border-right-color: #2c3e50;
}
.introjs-arrow.top {
  border-bottom-color: #2c3e50;
}
.introjs-arrow.right {
  border-left-color: #2c3e50;
}
.introjs-arrow.bottom {
  border-top-color: #2c3e50;
}
/* 提示框头部区域 */
.introjs-tooltip-header {
  padding-right: 0 !important;
  padding-top: 0 !important;
}
.introjs-skipbutton {
  color: #409eff !important;
  font-size: 14px !important;
  font-weight: normal !important;
//   padding: 8px 10px !important ;
}
.introjs-tooltipbuttons {
  border: none !important;
}
.introjs-tooltiptext {
  font-size: 14px !important;
  padding: 15px !important;
}
/* 提示框按钮 */
.introjs-tooltipbuttons {
  display: flex;
  align-items: center;
  justify-content: center;
}
.introjs-button {
  width: 50px !important;
  text-align: center;
  padding: 4px !important;
  font-size: 12px !important;
  font-weight: 500 !important;
  border-radius: 3px !important;
  border: none !important;
}
.introjs-button:last-child {
  margin-left: 10px;
}
.introjs-prevbutton {
  color: #606266 !important;
  background: #fff !important;
  border: 1px solid #dcdfe6 !important;
}
.introjs-nextbutton {
  color: #fff !important;
  background-color: #409eff !important;
  border-color: #409eff !important;
}
.introjs-disabled {
  color: #9e9e9e !important;
  border-color: #bdbdbd !important;
  background-color: #f4f4f4 !important;
}
</style>

附加:只首次进入的时候显示引导

新手引导一般只有我们第一次进入这个网站的时候才会出现引导内容,后续都不会再显示,我们这里如何实现?

可以通过 localstorge 来存储一个 key,来判断用户是否是第一次进入这个网站,只需要在引导启动时候加个判断就行,代码如下:

mounted () {
    this.$nextTick(() => {
      if (localStorage.getItem('isFirst') === null || localStorage.getItem('isFirst') !== '1') {
        this.$intro().start()
        localStorage.setItem('isFirst', 1)
      }
    })
},

至此完成,测试有效!!!

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

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

相关文章

民宿小程序源码,开启民宿新模式

今天我为大家带来了一份最新的民宿小程序源码&#xff01;这个源码不仅可以帮助你开启民宿新模式&#xff0c;还可以让你轻松实现线上预订、在线客服等多种功能。 民宿小程序源码&#xff0c;是什么&#xff1f; 民宿小程序源码是一款基于微信小程序平台的民宿管理系统&#…

数据库基础概念

文章目录 一、什么是数据库二、数据库的分类三、数据库的使用&#xff08;内部&#xff09; 一、什么是数据库 数据库是一类软件&#xff0c;作用是管理数据&#xff0c;内部应用了许多数据结构。但是我们还可以用文档储存数据&#xff0c;为什么要出现数据库&#xff1f; 文…

2022年天府杯全国大学生数学建模竞赛B题第一“君”情解题全过程文档及程序

2022年天府杯全国大学生数学建模竞赛 B题 第一“君”情 原题再现&#xff1a; 近日俄罗斯和乌克兰的冲突日益加剧&#xff0c;不难发现现代战争仍然是以人为主的战争&#xff0c;并未进入到全机械化的战争状态。那么在战争中军事物资的补给显得十分重要&#xff0c;中国古代兵…

Opencv(图像处理)-基于Python-图像的基本运算-给图片加水印

1. 图像运算概念2. 图像运算2.1 add()2.2 substract()部分代码示例&#xff1a; 2.3 multiply()/divide()2.4 addWeighted()部分代码展示 2.5 与/或/非bitwise_and()bitwise_or()bitwise_not()bitwise_xor部分代码展示 3.给一幅图像添加水印 1. 图像运算概念 在计算机的世界里…

git工作流实践

常见分支命名 远程仓库的分支&#xff1a;主干分支master, 开发分支dev&#xff0c;发布分支release 个人开发分支&#xff1a;特性分支feature, 缺陷修改分支bugfix&#xff0c; 热更新分支 hotfix 一般工作流如下 创建个人本地开发分支&#xff1a; git checkout -b feat…

Benewake(北醒) 快速实现TFmini-i-RS485与电脑通信操作说明

目录 一、前言二、工具准备1. USB-RS485 转接器2. TFmini-i-RS4853. 兆信直流电源4.连接线、绝缘胶带、螺丝刀5. PC&#xff1a;Windows 系统6. 串口助手软件 三、连接方式1. USB-RS485 转接板接口说明2. TFmini-i-RS485 引脚定义3. 连接图 四、TFmini-i-RS485 与电脑通信操作说…

cisp pte模拟题

1.信息搜集 本题共三个key 端口 1433 27689 存活ip 192.168.85.137 2.访问网站27689进行信息搜集 一个登录框&#xff0c;sql注入失败&#xff0c;暴力破解失败 扫描目录 发现三个文件robots.txt ,web.config 除了robots.txt,其他都访问不了 访问robots.txt,发现一个file参数…

ChatGPT实际上是如何工作的?

ChatGPT是如何工作的&#xff1f; 我们深入研究了广受欢迎的AI聊天机器人ChatGPT的内部运作方式。如果您想了解它是如何进行生成式人工智能魔术的&#xff0c;请继续阅读。 谷歌、Wolfram Alpha和ChatGPT都通过一个单行文本输入框与用户进行交互&#xff0c;并提供文本结果。谷…

Ubuntu18.04下搭建Ardupliot开发环境

本文参考的文章: -Ardupilot开发环境搭建&#xff08;Ubuntu18.04&#xff0c;20190407&#xff09; -Ardupilot环境搭建 1、下载文件 1.在GitHub上下载ardupilot文件&#xff0c;网速很慢的时候科学上网。 git clone https://github.com/ArduPilot/ardupilotcd ardupilotgit…

音乐推荐系统实战

文章目录 1. 项目背景2. 数据处理2.1 统计用户播放总量2.2 统计歌曲播放总量2.3 过滤出实验数据2.4 加入音乐详情信息2.5 查看音乐集情况2.6 查看用户播放量的分布 3. 推荐系统3.1 排行榜单排序3.2 基于歌曲相似度的推荐&#xff08;协同过滤&#xff09;3.3 基于矩阵分解&…

市面上流行的 5 大网页制作工具总结

这里是对市面上流行的 5 大网页制作工具的总结&#xff1a; 1. 即时设计 即时设计是一款国内新一代在线协作设计工具&#xff0c;具备原型、设计、交付、协作和资源管理等功能&#xff0c;适合个人用户和团队使用。它提供丰富的社区设计资源和原型模板&#xff0c;支持 UI/UX…

Python 的十大特性

摘要 在了解 Python 的特性之前&#xff0c;我们首先要了解 Python 编程语言是什么。Python 编程语言是世界上发展最快的编程语言。这一高级通用编程语言提供了广泛的实际应用&#xff0c;并且是一种非常流行的认证。 Python 可以让程序员更加高效地工作和集成系统。Python 的…

vue中如何通过iframe方式加载本地的vue页面

这个需求一般很少能遇到&#xff0c;只要说去了iframe&#xff0c;很多人就会唾弃。 但是有时候的确无法避免使用它&#xff0c;当iframe的特性带来的优势远远高于自己用div模拟的时候 啥时候需要用到iframe加载本地的vue文件呢 我在写一个demo&#xff0c;我需要demo效果模拟…

【接口测试】神器JMeter

‍1 JMeter是什么 Apache JMeter是Apache组织开发的一款开源软件&#xff0c;是一款非常好用的接口测试工具。它的特点是开源免费&#xff0c;简单好用。 我们在测试过程需要做接口测试的话就可以使用它&#xff0c;也可以用来批量造数据&#xff0c;接下来我们就来看看JMete…

Django框架之验证码简单实现

是一种方式防止csrf的策略。在用户注册、登录页面的时候使用&#xff1b;为了防止暴力请求&#xff0c;减轻服务器压力。 目录 安装pillow库 验证码显示 引入类库 视图方法 创建路由 创建表单 模板内容 模板路由 模板视图 视图验证 路由 引入 验证视图 效果 成功…

从7K到20K,在测试行业摸爬滚打的这5年,想个2023年还没找到工作的提个醒~

我是一名转IT测试人&#xff0c;我的专业是化学&#xff0c;去化工厂实习才发现这专业的坑人之处&#xff0c;化学试剂害人不浅&#xff0c;有毒&#xff0c;易燃易爆&#xff0c;实验室经常用丙酮&#xff0c;甲醇&#xff0c;四氯化碳&#xff0c;接触多了&#xff0c;吃个饭…

JMeter 接口测试教程,详解 HTTP Request 取样器和 fiddler 调试技巧!

目录 前言&#xff1a; 一、HTTP Request取样器介绍 二、使用HTTP Request取样器进行接口调试 1. 创建测试计划&#xff08;Test Plan&#xff09;和线程组&#xff08;Thread Group&#xff09; 2. 配置HTTP Request取样器参数 3. 添加断言 4. 运行接口测试 三、结合f…

Linux 企业级安全原理和防范技巧

Linux 企业级安全原理和防范技巧 1. 企业级Linux系统防护概述1.1 企业级Linux系统安全威胁1.2 企业级Linux系统安全立体式防范体系1.2.1 Linux文件系统访问安全1.2.2 Linux进程安全1. 进程的种类2. 进程管理方法 1.2.3 Linux用户管理安全1. 管理用户及组文件安全2. 用户密码管理…

【云计算】云存储是什么意思?与本地存储有什么区别?

云计算环境下&#xff0c;衍生了云存储、云安全、云资源、云管理、云支出等等概念。今天我们就来了解下什么是云存储&#xff1f;云存储与本地存储有什么区别&#xff1f; 云存储是什么意思&#xff1f; 云存储是一种新型的数据管理方式&#xff0c;它通过网络将大量不同类型、…

UGUI进阶知识[二十九]循环GridView

节省内存的常用滑动列表还有一种形式&#xff0c;上下滑动的GridView。这种格式的滑动列表可用于移动设备的背包&#xff0c;仓库&#xff0c;商店UI等数据可能海量从而导致产生特别多但又看不见的UI的情况。 于是基于 UGUI进阶知识[八]循环利用滑动列表的循环ListView工程做了…