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 相关文章推荐
js实现的日期操作类DateTime函数代码
Mar 16 Javascript
基于jquery的一个简单的脚本验证插件
Apr 05 Javascript
javascript淡入淡出效果的实现思路
Mar 31 Javascript
js中通过split函数分割字符串成数组小例子
Sep 21 Javascript
jQuery基础知识小结
Dec 22 Javascript
JavaScript中的null和undefined区别介绍
Jan 01 Javascript
AngularJS指令中的绑定策略实例分析
Dec 14 Javascript
javascript prototype原型详解(比较基础)
Dec 26 Javascript
Bootstrap缩略图的创建方法
Mar 22 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
Apr 04 jQuery
js之切换全屏和退出全屏实现代码实例
Sep 09 Javascript
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 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
咖啡知识大全
2021/03/03 新手入门
php下将图片以二进制存入mysql数据库中并显示的实现代码
2010/05/27 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
PHP解析url并得到url参数方法总结
2018/10/11 PHP
JavaScript获取和设置CheckBox状态的简单方法
2013/07/05 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
jQuery实现在列表的首行添加数据
2015/05/19 Javascript
jquery实现表单验证简单实例演示
2015/11/23 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
使用ThinkJs搭建微信中控服务的实现方法
2019/08/08 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
vue使用微信扫一扫功能的实现代码
2020/04/11 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
Python装饰器的函数式编程详解
2015/02/27 Python
基于python的字节编译详解
2017/09/20 Python
Python时间戳使用和相互转换详解
2017/12/11 Python
浅析Python数据处理
2018/05/02 Python
python 处理string到hex脚本的方法
2018/10/26 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
2018/10/29 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
wxPython绘图模块wxPyPlot实现数据可视化
2019/11/19 Python
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
成人大专生实习期的自我评价
2013/10/02 职场文书
美术国培研修感言
2014/02/12 职场文书
2014学年自我鉴定
2014/02/23 职场文书
劳动工资科岗位职责范本
2014/03/02 职场文书
给朋友的赠语
2015/06/23 职场文书