Driver.js是什么?
当点击进这篇文章的同学,看到标题,脸上会出现大大的问号,Driver.js是什么?有什么用。别急接下来,我将来讲解,什么是Driver.js.
Driver.js 是一个强大的,轻量级,使用原生 JavaScript 引擎开发的库,用于在页面聚焦用户的关注点。它支持所有主流浏览器,并且可高度自定义。
以下为其官网:
https://driverjs.com/
食用指南(vue版)
快速入手
效果展示
我们先来看一下driver.js的效果
效果图的代码讲解(引入driver.js)
接下来,我们看看vue的代码
<template> <div class="slide"> <div class="slide_part" id='first'> <p>First</p> </div> <div class="slide_part" id='second'> <p>Second</p> </div> </div> </template> <script> import { driver } from "driver.js"; import "driver.js/dist/driver.css"; export default { data() { return { arr: [{ element: '#first', // 这是需要高亮的元素 popover: { // 引导展示数据 title: '标题', // 这是标题 } }, { element: '#second', popover: { title: '标题', // 这是标题 } }, ] } }, mounted() { const driverObj = driver({ showProgress: true, steps:this.arr }); driverObj.drive(); } } </script>
复制
从代码上面来看
html:
我们创建了两个div标签作为两个盒子,分别放进了两句话,Frist、Second.
js:
在js上面我们导入了driver.js的库,并在data里面写入table数组,里面放了两个对象,其中对象的结构分别为element属性(相应的标签的id/需要高亮的元素),popover对象(引导展示数据)里面又放了一个title属性(对相应标签的说明)。在钩子函数mounted中,我们创建了driver的实现类,这个类里面传递这几个属性,showProgress是否展示标签页,steps属性,告诉driver去对谁进行漫游。最后通过这个实现类的方法.drive(),去开启功能。
详细介绍
下载
官网提供了三种下载方式
# Using npm npm install driver.js # Using pnpm pnpm install driver.js # Using yarn yarn add driver.js
复制
导包
下载后,我们需要使用就得在对应的页面导包,如果全局都想要使用直接放main.js文件
import { driver } from "driver.js"; import "driver.js/dist/driver.css";
复制
使用
drive实例属性
我们先来谈一下:drive实例
创建实例
const driverObj = driver({里面写实例属性}); //或者这样写实例属性 driverObj.alloClose=true
复制
实例属性介绍:
allowClose(bool):点击覆盖是否应该关闭
就是你鼠标点击其他地方会不会关闭显示效果
这是allowClose为true的时候,点击其他地方,这些页面引导就没了,如果是false你点击其他地方,它也还在
opacity(0-1):背景不透明度
这个没有什么好说明的
animate(bool):动画时改变突出显示的元素
就是在切换下一个需要引导的点的时候动画更加流畅
如果是false就会是这样效果,看着不流畅。默认true
padding:元素到周围边缘的距离
这个也没啥好说的
popoverOffset(int):弹窗与元素偏移距离
字面意思,你这个弹窗和元素距离多远喏
我把popoverOffset设置为100
发现偏移距离会很大
showProgress:是否显示弹窗进度
看到上面那张图1 0f 2了吧,你要是把这个设置成false,那个就没了
doneBtnText:最后一个按钮上的文本
doneBtnText:"羊羊羊"
nextBtnText:下一个按钮文本
prevBtnText:上一个按钮文本
上面nextBtnText与prevBtnText我放一起说
prevBtnText:"234",
nextBtnText:"123"
其实这里我有个疑惑,只有两个按钮嘛?因为我只引了两个阶段,如果我引三个阶段会发生上面?
我发现他好像就是把这两个按钮命名成下一个按钮和上一个按钮,所以上一个按钮一直叫“234”,下一个按钮一直叫“123”,想想drive.js的作用就是做新手引导的,似乎这样设计也没问题。
keyboardControl:允许通过键盘控制(escape键关闭,箭头键移动)
允许键盘控制喏
steps 属性(数组):(重点)
举个例子:
const stepDefinition = { element: '#some-item', popover: { className: 'popover-class', title: 'Title', description: 'Description', showButtons: false, closeBtnText: 'Close', nextBtnText: 'Next', prevBtnText: 'Previous', popoverClass: "driverjs-theme", } };
复制
-
element:要突出显示的查询选择器字符串或节点
如上面代码,'#some-item',就是一个标签它的id叫some-item,我们要引导的东西就是这元素了,所以就写成 element: '#some-item',
-
popover
className:className来包装这个特定的步骤弹出窗口,除了驱动程序选项中的一般
classNametitle:弹出窗口上的标题
description:弹出窗口上的描述信息
showButtons:在页脚不显示控制按钮
closeBtnText:此步骤的关闭按钮上的文本
nextBtnText:此步骤的下一个按钮文本
prevBtnText:此步骤的上一个按钮文本
popoverClass:弹窗的自定义样式名
drive实例方法
常用方法介绍
const driver = new Driver(driverOptions); const isActivated = driver.isActivated; driver.moveNext(); driver.movePrevious(); driver.start(stepNumber = 0); driver.highlight(string|stepDefinition); driver.reset(); driver.hasHighlightedElement(); driver.hasNextStep(); driver.hasPreviousStep(); driver.preventMove(); const activeElement = driver.getHighlightedElement(); const lastActiveElement = driver.getLastHighlightedElement(); activeElement.getCalculatedPosition(); activeElement.hidePopover(); activeElement.showPopover(); activeElement.getNode();
复制
isActivated:检查驱动程序是否激活
moveNext:移动到步骤列表中的下一步
movePrevious:移动到步骤列表中的上一步
start:开始执行定义的步骤
highlight:使用查询选择器或步骤定义突出显示元素
reset:重置覆盖并清除屏幕
hasHighlightedElement:检查是否有突出显示的元素
hasNextStep:检查是否有下一步要进行
hasPreviousStep:检查是否有上一步要移动
preventMove:阻止当前移动。有用的' onNext '或' onPrevious ',如果你想;执行一些异步任务并手动移动到下一步
getCalculatedPosition:获取屏幕上当前突出显示的元素
getCalculatedPosition:获取活动元素的屏幕坐标
hidePopover:隐藏弹出窗口
showPopover:显示弹出窗口
getNode:获取该元素背后的DOM元素
highlight
const driverObj = driver({ popoverClass: "driverjs-theme", stagePadding: 4, }); driverObj.highlight({ element: "#highlight-me", popover: { side: "bottom", title: "This is a title", description: "This is a description", } })
复制
看这个代码就懂,为啥我highlight()
方法说和直接给steps放数组一样
退出时确认
覆盖,如果关闭覆盖,我们可以点击其他地方来退出,或者使用键盘的esc也可以退出,为了多一部在用户试图退出浏览时添加确认对话框或其他逻辑。我们可以利用onDestroyStarted
钩子函数来做一次判断
onDestroyStarted: () => { if (!driverObj.hasNextStep() || confirm("Are you sure?")) { driverObj.destroy(); } },
复制
Popover Position 弹出框位置
可以使用 side
和 align
选项控制弹出框的位置。 side
选项控制将显示弹出框的元素的一侧, align
选项控制弹出框与元素的对齐。
import { driver } from "driver.js"; import "driver.js/dist/driver.css"; const driverObj = driver(); driverObj.highlight({ element: '#left-start', popover: { title: 'Animated Tour Example', description: 'Here is the code example showing animated tour. Let\'s walk you through it.', side: "left", align: 'start' } });
复制
注意这里面的side: 与 align: 可以通过下方的页面去试下面按钮的值分别对应side与align的值
https://driverjs.com/docs/popover-position
小demo
感谢各位能够看到这里,我这里准备了一份代码给各位,快去试试吧!!!!!
<template> <div> <input type="text" id="name" v-on:focus="w1"> </div> </template> <script> import { driver } from "driver.js"; import "driver.js/dist/driver.css"; export default { data() { return { driverObj: new driver({ popoverClass: "driverjs-theme", stagePadding: 0,}), } }, methods: { w1() { this.driverObj.highlight({ element: "#name", popover: { title: "Name", description: "Enter your name here", }, }); }, }, } </script>
复制