vue如何使用driver.js实现项目功能向导指引

目录
  • 介绍
  • 安装
  • 使用
    • 突出显示单个元素
    • 高亮和弹出窗口
    • 定位弹出窗口
    • 创建功能介绍
    • 异步操作
  • 配置
  • 定义步骤
  • API方法
  • 实战
  • 效果

介绍

https://github.com/kamranahmedse/driver.js

driver.js 是一个轻量级、无依赖的原生JavaScript引擎,在整个页面中驱动用户的注意力,强大的、高度可定制的原生JavaScript引擎,无外部依赖,支持所有主流浏览器。

安装

npm install driver.js

使用

import Driver from 'driver.js';
import 'driver.js/dist/driver.min.css';

突出显示单个元素

const driver = new Driver();
driver.highlight('#create-post');

高亮和弹出窗口

const driver = new Driver();
driver.highlight({
  element: '#some-element',
  popover: {
    title: 'Title for the Popover',
    description: 'Description for it',
  }
});

定位弹出窗口

const driver = new Driver();
driver.highlight({
  element: '#some-element',
  popover: {
    title: 'Title for the Popover',
    description: 'Description for it',
    // position can be left, left-center, left-bottom, top,
    // top-center, top-right, right, right-center, right-bottom,
    // bottom, bottom-center, bottom-right, mid-center
    position: 'left',
  }
});

还可以使用offset属性为弹窗位置添加偏移量

const driver = new Driver();
driver.highlight({
  element: '#some-element',
  popover: {
    title: 'Title for the Popover',
    description: 'Description for it',
    position: 'bottom',
    // Will show it 20 pixels away from the actual position of popover
    // You may also provide the negative values
    offset: 20,
  }
});

创建功能介绍

功能介绍在新用户入门时很有用,可以让他们了解应用程序的不同部分。您可以使用驱动程序无缝创建它们。定义步骤,并在你想开始展示时调用start。用户将能够使用键盘或使用弹出窗口上的按钮来控制步骤。

const driver = new Driver();

// Define the steps for introduction
driver.defineSteps([
  {
    element: '#first-element-introduction',
    popover: {
      className: 'first-step-popover-class',
      title: 'Title on Popover',
      description: 'Body of the popover',
      position: 'left'
    }
  },
  {
    element: '#second-element-introduction',
    popover: {
      title: 'Title on Popover',
      description: 'Body of the popover',
      position: 'top'
    }
  },
  {
    element: '#third-element-introduction',
    popover: {
      title: 'Title on Popover',
      description: 'Body of the popover',
      position: 'right'
    }
  },
]);

// Start the introduction
driver.start();

异步操作

对于转换步骤之间的任何异步操作,可以将执行延迟到操作完成。你所要做的就是在 onNextonPrevious 回调函数中使用driver.preventMove() 停止过渡,并使用 driver.moveNext() 手动初始化它。这是一个示例实现,它将在第二步停止4秒钟,然后进入下一步。

const driver = new Driver();

// Define the steps for introduction
driver.defineSteps([
  {
    element: '#first-element-introduction',
    popover: {
      title: 'Title on Popover',
      description: 'Body of the popover',
      position: 'left'
    }
  },
  {
    element: '#second-element-introduction',
    popover: {
      title: 'Title on Popover',
      description: 'Body of the popover',
      position: 'top'
    },
    onNext: () => {
      // Prevent moving to the next step
      driver.preventMove();

      // Perform some action or create the element to move to
      // And then move to that element
      setTimeout(() => {
        driver.moveNext();
      }, 4000);
    }
  },
  {
    element: '#third-element-introduction',
    popover: {
      title: 'Title on Popover',
      description: 'Body of the popover',
      position: 'right'
    }
  },
]);

// Start the introduction
driver.start();

配置

const driver = new Driver({
  className: 'scoped-class',        // 封装driver.js弹窗的类名
  animate: true,                    // 是否进行动画
  opacity: 0.75,                    // 背景不透明度(0表示只有弹窗,没有覆盖层)
  padding: 10,                      // 元素到边缘的距离
  allowClose: true,                 // 点击覆盖层是否应该关闭
  overlayClickNext: false,          // 下一步点击覆盖层是否应该移动
  doneBtnText: 'Done',              // final按钮文本
  closeBtnText: 'Close',            // 关闭按钮文本
  stageBackground: '#ffffff',       // 高亮元素背后的舞台背景颜色
  nextBtnText: 'Next',              // 下一步按钮文本
  prevBtnText: 'Previous',          // 前一步按钮文本
  showButtons: false,               // 在页脚不显示控制按钮
  keyboardControl: true,            // 允许通过键盘控制(esc键关闭,箭头键移动)
  scrollIntoViewOptions: {},        // 如果可能的话,我们使用`scrollIntoView()`,如果你想要任何选项,在这里传递
  onHighlightStarted: (Element) => {}, // 当元素将要高亮时调用
  onHighlighted: (Element) => {},      // 当元素完全高亮时调用
  onDeselected: (Element) => {},       // 当元素被取消选择时调用
  onReset: (Element) => {},            // 当覆盖层即将被清除时调用
  onNext: (Element) => {},             // 当移动到下一个步骤时调用
  onPrevious: (Element) => {},         // 在任何步骤中移动到上一步时调用
});

定义步骤

定义步骤时可以传递的一组选项 defineSteps 或传递给 highlight 方法的对象:

const stepDefinition = {
  element: '#some-item',        // 要突出显示的查询选择器字符串或节点
  stageBackground: '#ffffff',   // 这将覆盖在驱动程序中设置的
  popover: {                    // 如果为空或未指定弹窗,则不会有弹窗
    className: 'popover-class', // 除了驱动程序选项中的一般类名外,还要包装这个特定步骤弹出窗口
    title: 'Title',             // popover 标题
    description: 'Description', // popover 描述
    showButtons: false,         // 在页脚不显示控制按钮
    doneBtnText: 'Done',        // 最后一个按钮文本
    closeBtnText: 'Close',      // 关闭按钮文本
    nextBtnText: 'Next',        // 下一个按钮文本
    prevBtnText: 'Previous',    // 上一个按钮文本
  },
  onNext: () => {},             // 从当前步骤移动到下一步时调用
  onPrevious: () => {},         // 从当前步骤移动到上一步时调用
};

突出显示单个元素时的效果

const driver = new Driver(driverOptions);
driver.highlight(stepDefinition);

创建一个分步指南:

const driver = new Driver(driverOptions);
driver.defineSteps([
    stepDefinition1,
    stepDefinition2,
    stepDefinition3,
    stepDefinition4,
]);

API方法

下面是可用的方法集:

const driver = new Driver(driverOptions);

// 检查driver是否激活
if (driver.isActivated) {
    console.log('Driver is active');
}

// 在步骤指南中,可以调用以下方法
driver.defineSteps([ stepDefinition1, stepDefinition2, stepDefinition3 ]);
driver.start(stepNumber = 0);  // 定义开始步骤
driver.moveNext();             // 移动到“步骤”列表中的下一步
driver.movePrevious();         // 移动到“步骤”列表中的上一步
driver.hasNextStep();          // 检查是否有下一步要移动
driver.hasPreviousStep();      // 检查是否有要移动到的上一个步骤

// 阻止当前移动,如果你想,可以在`onNext`或`onPrevious`中使用,执行一些异步任务,然后手动切换到下一步
driver.preventMove();

// 使用查询选择器或步骤定义突出显示元素
driver.highlight(string|stepDefinition);

// 重新定位弹出窗口并突出显示元素
driver.refresh();

// 重置覆盖层并清空屏幕
driver.reset();

// 另外,你可以传递一个布尔参数
// 立即清除,不做动画等
// 在你运行的时候可能有用
// driver程序运行时的不同实例
driver.reset(clearImmediately = false);

// 检查是否有高亮的元素
if(driver.hasHighlightedElement()) {
    console.log('There is an element highlighted');
}

// 获取屏幕上当前高亮显示的元素,would be an instance of `/src/core/element.js`
const activeElement = driver.getHighlightedElement();

// 获取最后一个高亮显示的元素, would be an instance of `/src/core/element.js`
const lastActiveElement = driver.getLastHighlightedElement();

activeElement.getCalculatedPosition(); // 获取活动元素的屏幕坐标
activeElement.hidePopover();           // 隐藏弹出窗口
activeElement.showPopover();           // 显示弹出窗口

activeElement.getNode();  // 获取这个元素后面的DOM元素

别忘了给触发 driver 的 click 绑定添加 e.stopPropagation()

实战

下面是我实现的一个 vue 的 demo,用的 driver.js0.9.8

<template>
    <div class='driver-demo'>
        <div class="btn" @click="handleClick">向导指引</div>
        <!-- 上 -->
        <div id="step-item-1" class="top">
            <h2>上面部分</h2>
            <section>生活不过是一片混乱,充满了各种可笑的、龌龊的事情,它只能给人们提供笑料,但是他笑的时候却禁不住满心哀伤。</section>
        </div>
        <!-- 右 -->
        <div id="step-item-2" class="right">
            <h2>右边部分</h2>
            <section>
                月亮是那崇高而不可企及的梦想,六便士是为了生存不得不赚取的卑微收入 。多少人只是胆怯地抬头看一眼月亮,又继续低头追逐赖以温饱的六便士?
            </section>
        </div>
        <!-- 下 -->
        <div id="step-item-3" class="bottom">
            <h2>下边部分</h2>
            <section>我用尽了全力,过着平凡的一生。</section>
        </div>
        <!-- 左 -->
        <div id="step-item-4" class="left">
            <h2>左边部分</h2>
            <section>梦想什么时候开始都不晚。</section>
        </div>
        <!-- 中 -->
        <div id="step-item-5" class="center">
            <h2>中间部分</h2>
            <section>
                我们每个人生在世界上都是孤独的……尽管身体互相依傍却并不在一起,既不了解别人也不能为别人所了解。
            </section>
        </div>
    </div>
</template>

<script>
// 引入资源
import Driver from 'driver.js';
import 'driver.js/dist/driver.min.css';

export default {
    name: 'DriverDemo',
    data () {
        return {
            driverOptions: {
                className: 'kaimo-driver',        // 封装driver.js弹窗的类名
                animate: true,                    // 是否进行动画
                opacity: 0.5,                    // 背景不透明度(0表示只有弹窗,没有覆盖层)
                padding: 20,                      // 元素到边缘的距离
                allowClose: true,                 // 点击覆盖层是否应该关闭
                overlayClickNext: false,          // 下一步点击覆盖层是否应该移动
                doneBtnText: '确定',              // final按钮文本
                closeBtnText: '我知道了',            // 关闭按钮文本
                stageBackground: '#fff',       // 高亮元素背后的舞台背景颜色
                nextBtnText: '下一步',              // 下一步按钮文本
                prevBtnText: '上一步',          // 前一步按钮文本
                showButtons: true,               // 在页脚不显示控制按钮
                keyboardControl: true,            // 允许通过键盘控制(esc键关闭,箭头键移动)
                scrollIntoViewOptions: {},        // 如果可能的话,我们使用`scrollIntoView()`,如果你想要任何选项,在这里传递
                onHighlightStarted: (Element) => {}, // 当元素将要高亮时调用
                onHighlighted: (Element) => {},      // 当元素完全高亮时调用
                onDeselected: (Element) => {},       // 当元素被取消选择时调用
                onReset: (Element) => {},            // 当覆盖层即将被清除时调用
                onNext: (Element) => {},             // 当移动到下一个步骤时调用
                onPrevious: (Element) => {},         // 在任何步骤中移动到上一步时调用
            }
        };
    },
    methods: {
        handleClick(e) {
            // 阻止点击事件进一步传播,不加的话指引打开会关闭
            e.stopPropagation();

            // 初始化
            const driver = new Driver(this.driverOptions);
            // 自定义几个步骤
            driver.defineSteps([
                this.stepDefinition1(),
                this.stepDefinition2(),
                this.stepDefinition3(),
                this.stepDefinition4(),
                this.stepDefinition5(),
            ]);
            // 开始进行向导,默认从0开始也就是步骤1,也可以自己调整其他步骤(0可以不写)
            driver.start(0);
        },
        stepDefinition1() {
            return {
                element: '#step-item-1',        // 要突出显示的查询选择器字符串或节点
                // stageBackground: '#ffffff',   // 这将覆盖在驱动程序中设置的
                popover: {                    // 如果为空或未指定弹窗,则不会有弹窗
                    className: 'popover-class', // 除了驱动程序选项中的一般类名外,还要包装这个特定步骤弹出窗口
                    title: '步骤1',             // popover 标题
                    description: '这是步骤1的向导描述', // popover 描述
                    // showButtons: true,         // 在页脚不显示控制按钮
                    // doneBtnText: 'Done',        // 最后一个按钮文本
                    // closeBtnText: 'Close',      // 关闭按钮文本
                    // nextBtnText: 'Next',        // 下一个按钮文本
                    // prevBtnText: 'Previous',    // 上一个按钮文本
                },
                onNext: () => { // 从当前步骤移动到下一步时调用
                    console.log("步骤1:onNext");
                },
                onPrevious: () => { // 从当前步骤移动到上一步时调用
                    console.log("步骤1:onPrevious");
                },
            };
        },
        stepDefinition2() {
            return {
                element: '#step-item-2',        // 要突出显示的查询选择器字符串或节点
                popover: {                    // 如果为空或未指定弹窗,则不会有弹窗
                    className: 'popover-class', // 除了驱动程序选项中的一般类名外,还要包装这个特定步骤弹出窗口
                    title: '步骤2',             // popover 标题
                    description: '这是步骤2的向导描述', // popover 描述
                    position: 'left-center'
                },
                onNext: () => { // 从当前步骤移动到下一步时调用
                    console.log("步骤2:onNext");
                },
                onPrevious: () => { // 从当前步骤移动到上一步时调用
                    console.log("步骤2:onPrevious");
                },
            };
        },
        stepDefinition3() {
            return {
                element: '#step-item-3',        // 要突出显示的查询选择器字符串或节点
                popover: {                    // 如果为空或未指定弹窗,则不会有弹窗
                    className: 'popover-class', // 除了驱动程序选项中的一般类名外,还要包装这个特定步骤弹出窗口
                    title: '步骤3',             // popover 标题
                    description: '这是步骤3的向导描述', // popover 描述
                },
                onNext: () => { // 从当前步骤移动到下一步时调用
                    console.log("步骤3:onNext");
                },
                onPrevious: () => { // 从当前步骤移动到上一步时调用
                    console.log("步骤3:onPrevious");
                },
            };
        },
        stepDefinition4() {
            return {
                element: '#step-item-4',        // 要突出显示的查询选择器字符串或节点
                popover: {                    // 如果为空或未指定弹窗,则不会有弹窗
                    className: 'popover-class', // 除了驱动程序选项中的一般类名外,还要包装这个特定步骤弹出窗口
                    title: '步骤4',             // popover 标题
                    description: '这是步骤4的向导描述', // popover 描述
                    position: 'right-center'
                },
                onNext: () => { // 从当前步骤移动到下一步时调用
                    console.log("步骤4:onNext");
                },
                onPrevious: () => { // 从当前步骤移动到上一步时调用
                    console.log("步骤4:onPrevious");
                },
            };
        },
        stepDefinition5() {
            return {
                element: '#step-item-5',        // 要突出显示的查询选择器字符串或节点
                popover: {                    // 如果为空或未指定弹窗,则不会有弹窗
                    className: 'popover-class', // 除了驱动程序选项中的一般类名外,还要包装这个特定步骤弹出窗口
                    title: '步骤5',             // popover 标题
                    description: '这是步骤5的向导描述', // popover 描述
                },
                onNext: () => { // 从当前步骤移动到下一步时调用
                    console.log("步骤5:onNext");
                },
                onPrevious: () => { // 从当前步骤移动到上一步时调用
                    console.log("步骤5:onPrevious");
                },
            };
        }
    },
};
</script>

<style lang="scss" scoped>
.driver-demo {
    position: relative;
    text-align: center;
    background-color: #eee;
    padding: 40px;
    .btn {
        width: 100px;
        height: 48px;
        line-height: 48px;
        border: 1px solid purple;
        background-color: plum;
        border-radius: 4px;
        cursor: pointer;
    }
    .top {
        position: absolute;
        top: 0;
        left: 400px;
        width: 300px;
        height: 140px;
        background-color: silver;
    }
    .right {
        position: absolute;
        top: 60px;
        right: 0;
        width: 200px;
        height: 300px;
        background-color: salmon;
    }
    .bottom {
        position: absolute;
        bottom: 200px;
        left: 400px;
        width: 200px;
        height: 100px;
        background-color: skyblue;
    }
    .left {
        position: absolute;
        top: 50%;
        left: 0;
        width: 300px;
        height: 70px;
        background-color: seagreen;
    }
    .center {
        margin: 330px auto;
        width: 400px;
        height: 100px;
        background-color: sandybrown;
    }
}
</style>

效果

实现的功能向导指引效果如下:

到此这篇关于vue里使用driver.js实现项目功能向导指引的文章就介绍到这了,更多相关vue项目功能向导指引内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • vue3项目新用户引导组件driver.js示例详解

    好用的用户引导插件有 intro.js 和 driver.js 两个,对比了一下,最终还是使用了driver.js主要有以下原因: 用法简单 可以商用 总要选一个吧 项目使用的是vue3+ts因为多个地方需要使用引导,就直接做成组件使用不废话上代码 yarn add driver.js 或者 npm i driver.js 组件代码 <!-- * @Description: 新用户引导组件 * @LastEditTime: 2022-08-19 11:43:25 --> <templat

  • Vue使用driver.js做引导页

    目录 简介及使用教程 特点: 安装 使用 引导页效果 轻量级.无依赖的原生 JavaScript 引擎,可将用户的注意力集中在整个页面上:这是一个功能强大且高度可定制的基于原生JavaScript开发的新用户引导库. 简介及使用教程 Driver.js是一个功能强大且高度可定制的基于原生JavaScript开发的新用户引导库.它没有依赖项,支持所有主要浏览器. 特点: 简单:简单易用,完全没有外部依赖 高度可定制:有一个强大的api,可以用于你希望突出显示任何内容 高亮显示:页面功能介绍上的任意

  • vue如何使用driver.js实现项目功能向导指引

    目录 介绍 安装 使用 突出显示单个元素 高亮和弹出窗口 定位弹出窗口 创建功能介绍 异步操作 配置 定义步骤 API方法 实战 效果 介绍 https://github.com/kamranahmedse/driver.js driver.js 是一个轻量级.无依赖的原生JavaScript引擎,在整个页面中驱动用户的注意力,强大的.高度可定制的原生JavaScript引擎,无外部依赖,支持所有主流浏览器. 安装 npm install driver.js 使用 import Driver f

  • vue.js+boostrap项目实践(案例详解)

    一.为什么要写这篇文章 最近忙里偷闲学了一下vue.js,同时也复习了一下boostrap,发现这两种东西如果同时运用到一起,可以发挥很强大的作用,boostrap优雅的样式和丰富的组件使得页面开发变得更美观和更容易,同时vue.js又是可以绑定model和view(这个相当于MVC中的,M和V之间的关系),使得对数据变换的操作变得更加的简易,简化了很多的逻辑代码. 二.学习这篇文章需要具备的知识 1.需要有vue.js的知识 2.需要有一定的HTML.CSS.JavaScript的基础知识 3

  • 如何利用vue.js实现拖放功能

    前言 添加拖放功能是使你的程序更加自然和友好的方法.尽管有一些提供拖放功能的库,但是了解它们在底层的工作原理是非常有意义的. 在本文中,我们将用内置的 HTML 拖放 API 来实现简单的拖放系统.像这样: 拖放API HTML拖放API 是一种内置方法,它包含几个事件和属性,但是可以归纳为以两种类型的元素为思路来进行处理. 可拖动元素:可以被拖动的元素 可放置元素:可以接受被拖动元素的元素 如果这样分析,将会使分析拖放事件变得更加容易. 拖放事件 API 中有八个拖放事件可以用在我们程序中.

  • vue.js实现备忘录功能的方法

    这个vue实现备忘录的功能demo是K在github上找到的,K觉得这是一个用来对vue.js入门的一个非常简单的demo,所以拿在这里共享一下. (尊重他人劳动成果,从小事做起~  demo原github地址:https://github.com/vuejs/vue) 一.实现效果 二.代码展示 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>备忘录&l

  • Vue实现在线预览pdf文件功能(利用pdf.js/iframe/embed)

    前言 最近在做一个精品课程,需要在线预览课件ppt,我们的思路是将ppt转换为pdf在线预览,所以问题就是如何实现在线预览pdf了. 在实现的过程中,为了更好地显示效果,我采用了多种不同的方法,最终选择效果最好的pdf.js. 实现方法: 1:iframe 采取iframe将pdf嵌入网页从而达到预览效果,想法很美好,实现很简单,但显示很残酷- 虽然一行代码简洁明了,打开谷歌浏览器效果也还行,但缺点也是十分明显的!!!! <iframe src="http......" widt

  • Vue.js实现日历功能

    本文实例为大家分享了Vue.js实现日历功能的具体代码,供大家参考,具体内容如下 Github 功能需求 使用 Vue.js 实现指定年月的日历表,配合后台接口数据,添加对应日期的空气质量描述等信息.后台传递当月空气质量指数的数据,前端生成日历表后将空气质量指数添加到对应日期上. 空气质量数据示例: data.json { "code": 200, "msg": "", "data": [{ "time":

  • Driver.js前端引导页组件的具体使用

    目录 一.介绍 二.官方地址 三.使用方法 四.效果演示 五.使用感受 一.介绍 Driver.jsPowerful, highly customizable vanilla JavaScript engine to drive the user’s focus across the pageNo external dependencies, supports all major browsers and highly customizable Driver.js 是一个轻量级(~ 4kb gz

  • vue router仿天猫底部导航栏功能

    首先把天猫的导航贴出来,里面包括精选.品牌.会员.购物车.我五个导航及对应的图标. 分析: 1.图标的获取 进入阿里巴巴矢量图标库,网址  http://www.iconfont.cn. 点击官方图标库,选择天猫图标库,选中放入购物车. 点击添加至项目,点击创建新项目按钮,创建tianmao项目,点击确定. 此时会有查看在线链接和下载至本地两种方式,我选择第一种,因为后期如果要添加小图标的话,只需要重新生成在线链接,然后更新link即可 复制链接到index.html的link标签内,具体为 <

随机推荐