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 相关文章推荐
基于MVC3方式实现下拉列表联动(JQuery)
Sep 02 Javascript
js隐式全局变量造成的bug示例代码
Apr 22 Javascript
JavaScript中的Web worker多线程API研究
Dec 06 Javascript
javascript原型模式用法实例详解
Jun 04 Javascript
JS实现星星评分功能实例代码(两种方法)
Jun 09 Javascript
微信小程序加载更多 点击查看更多
Nov 29 Javascript
JavaScript面向对象精要(下部)
Sep 12 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
Oct 25 Javascript
详解CommonJS和ES6模块循环加载处理的区别
Dec 26 Javascript
Vue项目服务器部署之子目录部署方法
May 12 Javascript
layui监听select变化,以及设置radio选中的方法
Sep 24 Javascript
Vue实现简易购物车页面
Dec 30 Vue.js
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 编程的 5个良好习惯
2009/02/20 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
如何在Mozilla Gecko 用Javascript加载XSL
2007/01/09 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
JSON格式的键盘编码对照表
2015/01/29 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
js获取及判断键盘按键的方法
2015/12/01 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
2018/12/18 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
Django实现学生管理系统
2019/02/26 Python
Python实现直播推流效果
2019/11/26 Python
Django如何使用redis作为缓存
2020/05/21 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
专营店会计助理岗位职责
2013/11/29 职场文书
高中语文教学反思
2014/01/16 职场文书
大学生旅游业创业计划书
2014/01/29 职场文书
工作决心书范文
2014/03/11 职场文书
小学生期末评语
2014/04/21 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
CSS3实现360度循环旋转功能
2022/02/12 HTML / CSS
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript
Java Spring读取和存储详细操作
2022/08/05 Java/Android