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常用排序实现代码
Dec 28 Javascript
精通Javascript系列之数值计算
Jun 07 Javascript
Jquery 表格合并的问题分享
Sep 17 Javascript
jquery日历控件实现方法分享
Mar 07 Javascript
在linux中使用包管理器安装node.js
Mar 13 Javascript
JavaScript 函数的执行过程
May 09 Javascript
JS实现简单的tab切换选项卡效果
Sep 21 Javascript
React-Native左右联动List的示例代码
Sep 21 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
Jun 05 Javascript
javascript实现前端成语点击验证优化
Jun 24 Javascript
利用 JavaScript 实现并发控制的示例代码
Dec 31 Javascript
vue cli4中mockjs在dev环境和build环境的配置详情
Apr 06 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
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
2013/06/20 PHP
浅析PHP Socket技术
2013/08/02 PHP
ThinkPHP惯例配置文件详解
2014/07/14 PHP
thinkphp获取栏目和文章当前位置的方法
2014/10/29 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
基于jQuery的树控件实现代码(asp.net+json)
2010/07/11 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
php与js的区别是什么
2013/08/05 Javascript
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
2015/05/19 Javascript
详解JavaScript基于面向对象之继承
2015/12/13 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
关于angular js_$watch监控属性和对象详解
2017/04/24 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
Python遍历目录中的所有文件的方法
2016/07/08 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
python实现图片识别汽车功能
2018/11/30 Python
django框架创建应用操作示例
2019/09/26 Python
Python文件夹批处理操作代码实例
2020/07/21 Python
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
HTML5图片预览实例分享
2014/06/04 HTML / CSS
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
2014年助理工程师工作总结
2014/11/14 职场文书
小学运动会通讯稿
2015/07/18 职场文书
大学开学感言
2015/08/01 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书