Smartour 让网页导览变得更简单(推荐)


Posted in Javascript onJuly 19, 2019

本文介绍了Smartour 让网页导览变得更简单,分享给大家,具体如下:

Smartour 让网页导览变得更简单(推荐)

在遇到网页内容有着较大调整的时候,往往需要一个导览功能去告诉用户,某某功能已经调整到另外一个位置。比较常规的办法是添加一个蒙层,高亮显示被调整的区域,然后通过文字介绍去完成引导。我们把这个功能称为“导览”,而 Smartour 则把这个导览的功能抽离出来,提供了一个开箱即用的解决方案。

项目地址:https://github.com/jrainlau/smartour
官方示例:https://jrainlau.github.io/smartour/

Install

Smartour 被构建成了 umdes module 模块,允许用户通过不同的方式引入。

npm install smartour
/* ES Modules */
import Smartour from 'smartour/dist/index.esm.js'
/* CommandJS */
const Smartour = require('smartour')
/* <script> */
<script src="smartour/dist/index.js"></script>

基本用法

Smartour 提供了一个非常简单的 API focus(), 这是高亮一个元素最简单的方式。

let tour = new Smartour()

tour.focus({
 el: '#basic-usage'
})

插槽 Slot

插槽 slot 是用于为高亮元素提供描述的 html 字符串。

纯字符串:

let tour = new Smartour()

tour.focus({
 el: '#pure-string',
 slot: 'This is a pure string'
})

Html 字符串

let tour = new Smartour()

tour.focus({
 el: '#html-string',
 slot: `
  <div>
   <p>This is a html string</p>
  </div>
 `
})

插槽位置

插槽的位置可以选择4个不同的方向: top, right, left, bottom.

设置 options.slotPosition 属性即可覆盖默认的 top 位置。

let tour = new Smartour()

tour.focus({
 el: '#slot-positions',
 slot: `top`,
 options: {
  slotPosition: 'top' // 默认为 `top`
 }
})

插槽事件

插槽所定义的元素也可以绑定事件。我们通过 keyNodes 属性来为插槽元素绑定事件。

keyNodes 是内容为一系列 keyNode 的数组。 属性 keyNode.el 是一个 css 选择器,而 keyNode.event 属性则是对应元素所绑定的事件。

let tour = new Smartour()

tour.focus({
 el: '.slot-events-demo',
 options: {
  slotPosition: 'right'
 },
 slot: `

   Click here to occur an alert event
  </button>

   Click here to occur an alert event
  </button>
 `,
 keyNodes: [{
  el: '.occur-1',
  event: () => { alert('Event!!') }
 }, {
  el: '.occur-2',
  event: () => { alert('Another event!!') }
 }]
})

Queue

有的时候页面需要不止一个导览。Smartour 允许你把一系列的导览通过 .queue() 放在一起,然后挨个挨个地展示它们。

举个例子:

let tour = new Smartour()

tour
 .queue([{
  el: '.li-1',
  options: {
   layerEvent: tour.next.bind(tour)
  },
  slot: 'This is the 1st line.'
 }, {
  el: '.li-2',
  options: {
   layerEvent: tour.next.bind(tour)
  },
  slot: 'This is the 2nd line.'
 }, {
  el: '.li-3',
  options: {
   layerEvent: tour.next.bind(tour)
  },
  slot: 'This is the 3rd line.'
 }])
 .run() // 别忘了调用 `run()` 方法去展示第一个导览

选项

Smartour 是一个构建函数,它接收一个 options 参数去覆盖其默认选项

让我们看看它的默认选项是什么样子的:

{
 prefix: 'smartour', // class 前缀
 padding: 5, // 高亮区域内边距
 maskColor: 'rgba(0, 0, 0, .5)', // 带透明值的遮罩层颜色
 animate: true, // 是否使用动画
 slotPosition: 'top' // 默认的插槽位置
 layerEvent: smartour.over // 遮罩层点击事件,默认为结束导览
}

APIs

除了 .focus().queue().run() API 以外,Smartour 还提供了另外三个 API 专门用于控制导览的展示。

  • .next():展示下一个导览(只能配合 .queue() 使用)。
  • .prev():展示上一个导览(只能配合 .queue() 使用)。
  • .over():结束全部导览。

Smartour 的原理

Smartour 通过 element.getBoundingClientRect() api 来获取目标元素的宽高和位置信息,然后放置一个带着 box-shadow 样式的元素在其之上作为高亮区域。

由于点击事件无法再 box-shadow 的区域里触发,所以 Smartour 还放置了一个全屏透明的遮罩层用于绑定 layerEvent 事件。

高亮区域和插槽都被设置为 absolute。当页面滚动时,document.documentElement.scrollTop 或者 document.documentElement.scrollLeft 的值就会变化,然后 Smartour 会实时修正它的位置信息。

证书

MIT

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 获取用户客户端操作系统版本
Aug 25 Javascript
细说浏览器特性检测(2)-通用事件检测
Nov 05 Javascript
JavaScript实现梯形乘法表的方法
Apr 25 Javascript
JavaScript使用addEventListener添加事件监听用法实例
Jun 01 Javascript
详解javascript函数的参数
Nov 10 Javascript
javascript显示上周、上个月日期的处理方法
Feb 03 Javascript
原生JS实现平滑回到顶部组件
Mar 16 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
Jul 09 Javascript
js 将图片连接转换成base64格式的简单实例
Aug 10 Javascript
javascript self对象使用详解
Oct 18 Javascript
JS实现获取数组中最大值或最小值功能示例
Mar 02 Javascript
解决ant Design中Select设置initialValue时的大坑
Oct 29 Javascript
bootstrap Table实现合并相同行
Jul 19 #Javascript
Element-ui DatePicker显示周数的方法示例
Jul 19 #Javascript
element-ui 中使用upload多文件上传只请求一次接口
Jul 19 #Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
Jul 19 #Javascript
bootstrap table插件动态加载表头
Jul 19 #Javascript
Vue数据驱动表单渲染,轻松搞定form表单
Jul 19 #Javascript
VueJS 取得 URL 参数值的方法
Jul 19 #Javascript
You might like
PHP获取当前系统时间的方法小结
2018/10/03 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
Javascript编写2048小游戏
2015/07/07 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
AngularJS实现的base64编码与解码功能示例
2018/05/17 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
angular6 填坑之sdk的方法
2018/12/27 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
让python json encode datetime类型
2010/12/28 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
2016/07/02 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
python第三方库学习笔记
2020/02/07 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
土耳其国际性时尚购物网站:Modanisa
2018/01/19 全球购物
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
应用艺术专业个人的自我评价
2014/01/03 职场文书
收银员的岗位职责范本
2014/02/04 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
2014年民政工作总结
2014/11/26 职场文书
员工辞退通知书
2015/04/17 职场文书
暑期家教宣传单
2015/07/14 职场文书
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js