首页 > 其他分享 >通过Vue + intro.js 实现页面新手引导流程功能

通过Vue + intro.js 实现页面新手引导流程功能

时间:2023-08-02 10:35:13浏览次数:34  
标签:Vue color introjs js intro border important

最近需要增加一个新手页面引导流程的功能,在网上搜罗之后发现了intro.js这个插件

1.安装依赖

npm install intro.js --save

2.在main.js中引用插件

// 首页引导插件
import intro from 'intro.js' // introjs库
import 'intro.js/introjs.css' // introjs默认css样式
// introjs还提供了多种主题,可以通过以下方式引入
import 'intro.js/themes/introjs-modern.css' // introjs主题

// 把intro.js加入到vue的prototype中,方便使用,就可以直接通过this.$intro()来调用了
Vue.prototype.$intro = intro

3.使用

<!-- 新手引导 --> <template>     <div>         <div id="step1">             <div>这里边是你第一步需要指引所框选的内容</div>         </div>         <div id="step2">             <div>这里边是你第二步需要指引所框选的内容</div>         </div>         <div id="step3">             <div>这里边是你第三步需要指引所框选的内容</div>         </div>         <div class="new-tips" @click="viewIntro()">新人教程</div>     </div> </template> <script> export default {   name: 'guidStep',   data(){     return{          introOption: { // 参数对象             prevLabel: '上一步',             nextLabel: '下一步',             skipLabel: '跳过',             doneLabel: '完成',             tooltipClass: 'intro-tooltip', /* 引导说明文本框的样式 */             // highlightClass: 'intro-highlight', /* 说明高亮区域的样式 */             exitOnEsc: true, /* 是否使用键盘Esc退出 */             exitOnOverlayClick: false, /* 是否允许点击空白处退出 */             keyboardNavigation: true, /* 是否允许键盘来操作 */             showBullets: false, /* 是否使用点显示进度 */             showProgress: false, /* 是否显示进度条 */             scrollToElement: true, /* 是否滑动到高亮的区域 */             overlayOpacity: 0.5, // 遮罩层的透明度 0-1之间             positionPrecedence: ['bottom', 'top', 'right', 'left'], /* 当位置选择自动的时候,位置排列的优先级 */             disableInteraction: false, /* 是否禁止与元素的相互关联 */             hidePrev: true, /* 是否在第一步隐藏上一步 */             // hideNext: true, /* 是否在最后一步隐藏下一步 */             steps: [], /* steps步骤,可以写个工具类保存起来 */           },           tipsImg1: require('./img/avatar4.jpeg'), // 新手引导的提示图片           tipsImg2: require('./img/avatar3.jpeg') // 新手引导的提示图片     }   },   methods: {     // 重新查看引导     viewIntro(){         this.initGuide()     },     initGuide() {             // 绑定标签元素的选择器数组             this.introOption.steps = [                 { title: '系统使用指导', element: '#step1', intro: `鼠标悬浮在各个功能模块上,可快速查找系统对应操作SOP以及运维人员。<img src="` + this.tipsImg1 + `" alt="" style="width: 200px;margin-top: 15px;"/>`},                 { title: '个人信息', element: '#step2', intro: `点击个人头像/下拉图标,选择个人信息,初始密码为******,建议修改为个人账号密码。<img src="` + this.tipsImg2 + `" alt="" style="width: 125px;margin-top: 15px;"/>`, },                 { title: '重新引导', element: '#step3', intro: '点击此处可重新查看引导流程。', },             ]             this.$intro()                 .setOptions(this.introOption)                 // 点击结束按钮后执行的事件                 .oncomplete(() => {                     console.log('点击结束按钮后执行的事件')                 })                 // 点击跳过按钮后执行的事件                 .onexit(() => {                     console.log('点击跳过按钮后执行的事件')                 })                 // 确认完毕之后执行的事件                 .onbeforeexit(() => {                     console.log('确认完毕之后执行的事件')                 })                 .start()         },   },   mounted () {     this.$nextTick(() => {       if (localStorage.getItem('isFirst') === null || localStorage.getItem('isFirst') !== '1') {         this.$intro().start()         localStorage.setItem('isFirst', 1)       }     })   }, } </script> <style lang="scss"> .introjs-helperLayer{     box-shadow: rgba(33, 33, 33, 0.8) 0px 0px 1px 0px, rgba(33, 33, 33, 0.5) 0px 0px 0px 5000px!important;     border: 3px dashed #409eff; } .new-tips{     color: #409eff;     line-height: 80px;     cursor: pointer; } .introjs-tooltip-title{     font-size: 16px;     width: 80%;     padding-top: 10px; } .warper {   width: 200px;   height: 100px;   line-height: 100px;   text-align: center;   border: 1px solid saddlebrown; } /* 重置引导组件样式(类似element-ui个人使用) */ .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>
最后的效果是

参考https://blog.csdn.net/qq_38543537/article/details/130967247,更多使用细节可以去这位博主的博客中进行学习

 

标签:Vue,color,introjs,js,intro,border,important
From: https://www.cnblogs.com/luzanzan/p/17599897.html

相关文章

  • PHPJSON数据格式常见应用及实例解析
    PHPJSON数据格式常见应用及实例解析随着Web应用的兴起和普及,数据的传输和处理已经成为Web开发中不可或缺的一部分。PHP作为一种广泛使用的服务器端编程语言,对于数据的处理和传输也有着非常丰富的支持。其中,JSON数据格式已经成为Web开发中最常用的数据格式之一。本文将结合实例,介......
  • requests--post中json中文编码问题
    问题requestspost提交json数据时,默认在库中ensure_ascii为True。会对中文进行unicode编码。但是有的时候服务端并没有处理中文,没有进行解码,而我们又改不了服务端,就会出现问题!解决修改库的代码,添加上对应的ensure_ascii参数。不推荐,换个环境就用不了了。推荐:自己......
  • js sum 函数
    实现:Array.prototype.Sum=function(fn){returneval(this.map(x=>Number(typeoffn=="function"?fn(x):x)).join("+"))||0}用法示例:vararr1=[{name:'xx',value:1},{name:'xx',value:2},{name:'xx'......
  • JS中的浏览器对象模型-DOM(二)
    表单在HTML表单中,可以上传文件的唯一控件就是<inputtype="file">。当一个表单包含<inputtype="file">时,表单的enctype必须指定为multipart/form-data,method必须指定为post,浏览器才能正确编码并以multipart/form-data格式发送表单的数据。如下面代码所示一个图片展示元素,一个......
  • vue--day50--todolist案例自定义事件修改footer 和header 修改
    1.MyHeader.vue<template><divclass="todo-header"><!--v-model:="title"是实时绑定的--><inputtype="text"placeholder="请输入你的任务名称,回车键确认"v-model="title"@keyup.enter="add"/>......
  • vuex模块化
    importVuefrom'vue';importVuexfrom'vuex';Vue.use(Vuex);importhomefrom"./home"importsearchfrom"./search"conststore=newVuex.Store({modules:{home,search}});exportdefaultstore......
  • ruby web 实战(9)-vue 3基础(3)
    目录选项式API(OptionsAPI)选项式API(OptionsAPI)用包含多个选项的对象来描述组件的逻辑,例如data、methods和mounted。选项所定义的属性都会暴露在函数内部的this上,它会指向当前的组件实例。<script>exportdefault{//data()返回的属性将会成为响应式的状态......
  • Vue进阶用法4
    Vue进阶用法4vue3介绍1.性能的提升打包大小减少41%初次渲染快55%,更新渲染快133%内存减少54%2.源码的升级使用Proxy代替defineProperty实现响应式重写虚拟DOM的实现和Tree-Shaking3.拥抱TypeScriptVue3可以更好的支持TypeScript4.新的特性......
  • Vue入门命令2
    Vue入门命令2表单控制#input:checkbox(单选,多选),radio(单选)<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><scriptsrc="./js/vue.js"></script......
  • Vue进阶用法1
    Vue进阶用法1计算属性#如果{{函数()}},每次页面刷新,函数都会重新执行#函数---》当属性来使用,缓存<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><scriptsrc="./js/vue.js"......