Когда содержимое веб-страницы значительно изменено, часто требуется функция навигации, чтобы сообщить пользователю, что функция определенного была изменена на другую позицию. Более распространенный способ — добавить маску, выделить область, которую нужно отрегулировать, а затем завершить руководство с помощью текстового введения. Мы называем эту функцию «навигацией».SmartourОн извлекает функцию этого тура и предоставляет готовое решение.
адрес проекта:GitHub.com/называется дождь AU/что…Официальный пример:jrainlau.github.io/smartour
Install
Smartourбыл построен какumdа такжеes 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Предоставляет очень простой APIfocus(), что является самым простым способом выделить элемент.
let tour = new Smartour()
tour.focus({
el: '#basic-usage'
})
Слот
слот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`
}
})
```buttonslot-bottom">Bottom</buttonbuttonbutton>
## 插槽事件
插槽所定义的元素也可以绑定事件。我们通过 `keyNodes` 属性来为插槽元素绑定事件。
`keyNodes` 是内容为一系列 `keyNode` 的数组。 属性 `keyNode.el` 是一个 css 选择器,而 `keyNode.event` 属性则是对应元素所绑定的事件。
```javascript
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