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

 更新时间:2024年06月17日 10:57:42   作者:小破孩呦  
在同学们使用某些网站的新版本页面的时候,经常会出现一个类似于新手引导一样的效果,来帮助同学们更好的熟悉新版本页面的功能和使用,这篇文章主要给大家介绍了关于如何利用Vue+intro.js实现页面新手引导流程功能的相关资料,需要的朋友可以参考下

效果图:

 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)
      }
    })
},

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

总结

到此这篇关于利用Vue+intro.js实现页面新手引导流程功能的文章就介绍到这了,更多相关Vue intro.js页面新手引导流程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中el-table前端如何导出excel数据表格

    vue中el-table前端如何导出excel数据表格

    这篇文章主要介绍了vue中el-table前端如何导出excel数据表格,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • 结合el-upload组件实现大文件分片上传功能

    结合el-upload组件实现大文件分片上传功能

    Element UI的el-upload上传组件相信各位小伙伴都已经非常熟悉,最近接了一个新需求,要求在el-upload组件基础上实现分片上传功能,即小于等于5M文件正常上传,大于5M文件切成5M每片上传,那么这个功能怎么实现呢?一起看看吧
    2022-09-09
  • Vue中的百度地图定位BMap.GeolocationControl的用法

    Vue中的百度地图定位BMap.GeolocationControl的用法

    BMap.GeolocationControl 是百度地图API中的一个类,用于添加地理定位控件到地图上,以便用户可以通过该控件获取自己的当前位置,本文给大家介绍Vue中的百度地图定位BMap.GeolocationControl的用法,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • uni-app中App与webview双向实时通信详细代码示例

    uni-app中App与webview双向实时通信详细代码示例

    在移动应用开发中,uni-app是一个非常流行的框架,它允许开发者使用一套代码库构建多端应用,包括H5、小程序、App等,这篇文章主要给大家介绍了关于uni-app中App与webview双向实时通信的相关资料,需要的朋友可以参考下
    2024-07-07
  • 基于vue-router的matched实现面包屑功能

    基于vue-router的matched实现面包屑功能

    本文主要介绍了基于vue-router的matched实现面包屑功能,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 饿了么UI中el-tree树节点选中高亮的两种常用方式(highlight-current属性)

    饿了么UI中el-tree树节点选中高亮的两种常用方式(highlight-current属性)

    最近新做的项目有用到Element-UI tree组件,下面这篇文章主要给大家介绍了关于饿了么UI中el-tree树节点选中高亮的两种常用方式(highlight-current属性),文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Vue中Router路由两种模式hash与history详解

    Vue中Router路由两种模式hash与history详解

    这篇文章主要介绍了Vue中Router路由的两种模式,分别对hash模式与history模式作了简要分析,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-09-09
  • 详解vue3中虚拟列表组件的实现

    详解vue3中虚拟列表组件的实现

    这篇文章主要为大家详细介绍了vue3中实现虚拟列表组件的相关知识,包含加载更多以及loading状态,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-10-10
  • Vue + better-scroll 实现移动端字母索引导航功能

    Vue + better-scroll 实现移动端字母索引导航功能

    better-scroll 是一款重点解决移动端(已支持 PC)各种滚动场景需求的插件。这篇文章主要介绍了Vue + better-scroll 实现移动端字母索引导航功能,需要的朋友可以参考下
    2018-05-05
  • vue使用国密SM4进行加密、解密的过程

    vue使用国密SM4进行加密、解密的过程

    国密SM4算法是一种对称加密算法,适用于对称密钥加密和解密的场景,这篇文章主要介绍了vue使用国密SM4进行加密、解密,需要的朋友可以参考下
    2023-07-07

最新评论