Intro.js实现一个新手引导

1,452 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情

在新用户第一次进入系统,或者系统中添加了新功能时,一个简单的新手引导功能对于可以让用户快速了解系统的功能。

有很多插件可以选择,比如Intro.js、vue-guide、vue-tour、driver.js等等...

其中Intro.js是轻量级的(10kB),并且官方文档比较完善,可以快速上手,风格如下:

image.png

1. 安装依赖并引入:

安装依赖:

npm install intro.js --save

引入:

import introJs from 'intro.js'
import 'intro.js/introjs.css'

2. 使用方法:

这里有两种方式,如果新手指引内容比较简单并且固定,可以直接将属性写在html标签中,属性如下:

  • data-title:标题文字
  • data-intro:提示信息内容
<div data-title="Welcome!" data-intro="Hello World! 👋" >
</div>

introJs().start();

3.自定义配置

当页面都有一些特殊化的设置的时候,另外一种方法会更好。需要在JSON自定义配置,属性如下:

  • nextLabel: '下一步', // 下一个按钮文字
  • prevLabel: '上一步', // 上一个按钮文字
  • skipLabel: '跳过', // 跳过按钮文字
  • doneLabel: '我知道了', // 完成按钮文字
  • hidePrev: true, // 在第一步中是否隐藏上一个按钮
  • hideNext: false, // 在最后一步中是否隐藏下一个按钮
  • exitOnOverlayClick: false, // 点击叠加层时是否退出介绍
  • showStepNumbers: false, // 是否显示红色圆圈的步骤编号
  • disableInteraction: true, // 是否禁用点击框住的元素
  • showBullets: true, // 是否显示面板的指示点
  • tooltipClass: 'tool-tip',//自定义样式class
  • steps: [{ }], // 引导框内的相关参数配置,具体如下
introJs()
  .setOptions({
    steps: [{
      title: '欢迎',
      intro: '欢迎使用'
    },
    {
      element: document.querySelector('#step2'),
      intro: '步骤2...'
    }]
  }).start()

4. 注意事项

  1. element属性中设置的是目标的id或者class,也就是定位到相应的元素位置,如果不设置element,默认显示在屏幕中央。

  2. 如果涉及到一些其它事件的交互,需要在start()之前执行:

    introJs()
        .onchange(() => {  // 点击按钮后执行的事件 }) 
        .oncomplete(() => {  // 点击结束按钮后执行的事件 }) 
        .onexit(() => { // 结束后执行的事件 })
    
  3. 当需要区分具体点击的是哪一个按钮的时候,参数需要接收两个。第二个参数type表示点击的类型,跳过:'skip',完成:'done'等等

    .oncomplete((targetElement, type) => {
      if (type === 'done') {
       ...
      }
    
  4. 样式

    如果在vue中使用,需要单独写一个<style>标签放置样式,而不是放在<style scoped lang="scss">,这样不会生效

    可以直接覆盖原有的样式,也可以设置tooltipClass属性自定义样式类

5. 遇到的问题

在实现的过程中有一个步骤是用户点击【下一步】后,弹出一个窗口并定位到窗口的的元素,查阅文档后发现没有单独的上一步/下一步这些事件,可以使用:

onchange() 、 onbeforechange() 或 onafterchange() 在完成每个步骤后进行回调

但是要注意渲染的顺序问题(会导致定位不到下一步的位置),并且回调函数中不支持vue的写法,要使用原生写法才可以生效

6. 扩展:

  1. 可以以点击圆点的形式,将提示添加到页面:

image.png

html添加属性:

data-hint="Hello! 👋 Click on this link"
data-hint-position="bottom-middle"

然后调用方法:

introJs().addHints();
  1. API可以满足大部分自定义的需求:

官方指路: introjs.com/docs/intro

image.png