1、在项目中安装依赖
- 使用 yarn 安装
yarn add intro.js
- 使用 npm 安装
npm install intro.js --save
2、在vue.config.js文件中配置
const { defineConfig } = require('@vue/cli-service')
const webpack = require('webpack')
module.exports = defineConfig({
transpileDependencies: true,
configureWebpack: {
plugins: [
new webpack.ProvidePlugin({
introJs: ['intro.js'],
}),
],
},
})
3、在main.js文件中引入组件并挂载到实例上
import introJS from 'intro.js'
import 'intro.js/introjs.css'
Vue.prototype.$intro = introJS
import 'intro.js/themes/introjs-flattener.css'
4、在页面中使用
<template>
<div>
<div id="step1" class="warper">第1步</div>
<div id="step2" class="warper">第2步</div>
<div id="step3" class="warper">第3步</div>
</div>
</template>
<script>
export default {
data() {
return {
introOption: {
prevLabel: '上一步',
nextLabel: '下一步',
skipLabel: '跳过',
doneLabel: '完成',
tooltipPosition: 'bottom',
tooltipClass: 'intro-tooltip',
highlightClass: 'intro-highlight',
tooltipPosition: 'bottom',
exitOnEsc: true,
exitOnOverlayClick: false,
helperElementPadding: 2,
showStepNumbers: false,
keyboardNavigation: true,
showButtons: true,
showBullets: false,
showProgress: false,
scrollToElement: true,
overlayOpacity: 0.9,
positionPrecedence: ['bottom', 'top', 'right', 'left'],
disableInteraction: false,
steps: [],
},
}
},
mounted() {
this.initGuide()
},
methods: {
initGuide() {
this.introOption.steps = [
{
element: '#step1',
intro: '步骤1:step1!',
},
{
element: '#step2',
intro: '步骤2:step2!',
},
{
element: '#step3',
intro: '步骤3:step3!',
},
{
element: '#step4',
intro: '步骤4:step4!',
},
]
this.$intro()
.setOptions(this.introOption)
.oncomplete(() => {
console.log('点击结束按钮后执行的事件')
})
.onexit(() => {
console.log('点击跳过按钮后执行的事件')
})
.onbeforeexit(() => {
console.log('确认完毕之后执行的事件')
})
.start()
},
}
}
</script>
<style lang="less">
.warper {
width: 200px;
height: 100px;
line-height: 100px;
text-align: center;
border: 1px solid saddlebrown;
}
.intro-tooltip {
color: #ffff;
background: #2c3e50;
}
.introjs-bottom-left-aligned {
left: 45% !important;
}
.introjs-right,
.introjs-left {
top: 30%;
}
.intro-highlight {
background: rgba(255,255,255,0.5);
}
.introjs-arrow.left {
border-right-color: #2c3e50;
}
.introjs-arrow.top {
border-bottom-color: #2c3e50;
}
.introjs-arrow.right {
border-left-color: #2c3e50;
}
.introjs-arrow.bottom {
border-top-color: #2c3e50;
}
.introjs-tooltip-header {
padding-right: 0 !important;
padding-top: 0 !important;
}
.introjs-skipbutton {
color: #409eff !important;
font-size: 14px !important;
font-weight: normal !important;
padding: 8px 10px !important ;
}
.introjs-tooltipbuttons {
border: none !important;
}
.introjs-tooltiptext {
font-size: 14px !important;
padding: 15px !important;
}
.introjs-tooltipbuttons {
display: flex;
align-items: center;
justify-content: center;
}
.introjs-button {
width: 50px !important;
text-align: center;
padding: 4px !important;
font-size: 12px !important;
font-weight: 500 !important;
border-radius: 3px !important;
border: none !important;
}
.introjs-button:last-child {
margin-left: 10px;
}
.introjs-prevbutton {
color: #606266 !important;
background: #fff !important;
border: 1px solid #dcdfe6 !important;
}
.introjs-nextbutton {
color: #fff !important;
background-color: #409eff !important;
border-color: #409eff !important;
}
.introjs-disabled {
color: #9e9e9e !important;
border-color: #bdbdbd !important;
background-color: #f4f4f4 !important;
}
</style>