首屏引导页实现-Intro.js(vue3.0 ts)

前言

需求:用户从前台页面首次进入到后台页面时,对其进行新手指导
框架:vue3.0+ts
插件:intro.js

使用

  • 安装

    npm install intro.js --save
    //支持ts
    npm i --save-dev @types/intro.js
    

    官网

  • env.d.ts中

    declare module 'intro.js';
    
  • 组件中使用-引入

    import IntroJs from 'intro.js' // introjs库
    import 'intro.js/introjs.css' // introjs默认css样式
    // introjs还提供了多种主题,可以通过以下方式引入
    import 'intro.js/themes/introjs-modern.css'
    
  • 使用

     <section
     id="step4"
     class="conter"
    >
     {{ count }}
     <div
       id="step1"
       class="warper"
     >1</div>
     <div
       id="step2"
       class="warper"
     >2</div>
     <div
       id="step3"
       class="warper"
     >3</div>
    </section>
    onMounted(() => {
     IntroJs().setOptions({
       // nextLabel: '下一个  &rarr;', // 下一个按钮文字
       // prevLabel: '&larr; 上一个', // 上一个按钮文字
       // skipLabel: '跳过', // 跳过按钮文字
       // doneLabel: '立即体验', // 完成按钮文字
       // hidePrev: true, // 在第一步中是否隐藏上一个按钮
       // hideNext: true, // 在最后一步中是否隐藏下一个按钮
       // exitOnOverlayClick: false, // 点击叠加层时是否退出介绍
       // showStepNumbers: false, // 是否显示红色圆圈的步骤编号
       // disableInteraction: true, // 是否禁用与突出显示的框内的元素的交互,就是禁止点击
       // showBullets: false, // 是否显示面板指示点
       // 这里是更换成中文(默认英文)
       prevLabel: '上一步',
       nextLabel: '下一步',
       skipLabel: '跳过',
       doneLabel: '完成',
       /* 引导说明框相对高亮说明区域的位置 */
       tooltipPosition: 'bottom',
       /* 引导说明文本框的样式 */
       tooltipClass: 'intro-tooltip', // 用于设置全局的样式
       /* 说明高亮区域的样式 */
       highlightClass: 'intro-highlight',
       /* 引导说明框相对高亮说明区域的位置 */
       /* 是否使用键盘Esc退出 */
       exitOnEsc: true,
       /* 是否允许点击空白处退出 */
       exitOnOverlayClick: false,
       /* 提示边框的padding */
       helperElementPadding: 2,
       /* 是否显示说明的数据步骤 */
       showStepNumbers: false,
       /* 是否允许键盘来操作 */
       keyboardNavigation: true,
       /* 是否按键来操作 */
       showButtons: true,
       /* 是否使用点显示进度 */
       showBullets: false,
       /* 是否显示进度条 */
       showProgress: false,
       /* 是否滑动到高亮的区域 */
       scrollToElement: true,
       /* 遮罩层的透明度 */
       overlayOpacity: 0.9,
       /* 当位置选择自动的时候,位置排列的优先级 */
       positionPrecedence: ['bottom', 'top', 'right', 'left'],
       /* 是否禁止与元素的相互关联 */
       disableInteraction: false,
       /* 是否在第一步隐藏上一步 */
       // hidePrev: true,
       /* 是否在最后一步隐藏下一步 */
       // hideNext: true,
       /* steps步骤,可以写个工具类保存起来 */
       steps: [
         {
           // title: 'Welcome',
           element: '#step1',
           intro: '步骤1:step1!',
           position: 'bottom',
         },
         {
           element: '#step2',
           intro: '步骤2:step2!',
           position: 'bottom',
         },
         {
           element: '#step3',
           intro: '步骤3:step3!',
           position: 'bottom',
         },
         // 可以自定义html
         {
           element: '#step4',
           intro: `<div class="intro4">
               你好
               <img src="https://images.unsplash.com/photo-1608096299210-db7e38487075?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" />
           </div>`,
           position: 'bottom',
         },
       ],
     }).oncomplete(() => {
       // 点击结束按钮后执行的事件
       console.log('oncomplete');
     }).onexit(() => {
       // 点击跳过按钮后执行的事件
       console.log('onexit');
     })
       .onchange(() => {
       // 点击下一步执行的事件
         console.log('onchange');
       })
       .start();
    })
    
  • demo源码

	<template>
 <main class="container">
   <section
     class="header"
   >
     {{ msg }}
     <el-button
       type="primary"
     >
       立即认证
     </el-button>
     <el-input
       v-model="msg"
     />
   </section>
   <section
     id="step4"
     class="conter"
   >
     {{ count }}
     <div
       id="step1"
       class="warper"
     >1</div>
     <div
       id="step2"
       class="warper"
     >2</div>
     <div
       id="step3"
       class="warper"
     >3</div>
   </section>
 </main>
</template>
<script setup lang="ts">
import { onMounted, ref } from 'vue' // introjs主题
import IntroJs from 'intro.js' // introjs库
import 'intro.js/introjs.css' // introjs默认css样式
// introjs还提供了多种主题,可以通过以下方式引入
import 'intro.js/themes/introjs-modern.css'

const msg = ref('Hello')
const count = ref(710)
onMounted(() => {
 IntroJs().setOptions({
   // nextLabel: '下一个  &rarr;', // 下一个按钮文字
   // prevLabel: '&larr; 上一个', // 上一个按钮文字
   // skipLabel: '跳过', // 跳过按钮文字
   // doneLabel: '立即体验', // 完成按钮文字
   // hidePrev: true, // 在第一步中是否隐藏上一个按钮
   // hideNext: true, // 在最后一步中是否隐藏下一个按钮
   // exitOnOverlayClick: false, // 点击叠加层时是否退出介绍
   // showStepNumbers: false, // 是否显示红色圆圈的步骤编号
   // disableInteraction: true, // 是否禁用与突出显示的框内的元素的交互,就是禁止点击
   // showBullets: false, // 是否显示面板指示点
   // 这里是更换成中文(默认英文)
   prevLabel: '上一步',
   nextLabel: '下一步',
   skipLabel: '跳过',
   doneLabel: '完成',
   /* 引导说明框相对高亮说明区域的位置 */
   tooltipPosition: 'bottom',
   /* 引导说明文本框的样式 */
   tooltipClass: 'intro-tooltip', // 用于设置全局的样式
   /* 说明高亮区域的样式 */
   highlightClass: 'intro-highlight',
   /* 引导说明框相对高亮说明区域的位置 */
   /* 是否使用键盘Esc退出 */
   exitOnEsc: true,
   /* 是否允许点击空白处退出 */
   exitOnOverlayClick: false,
   /* 提示边框的padding */
   helperElementPadding: 2,
   /* 是否显示说明的数据步骤 */
   showStepNumbers: false,
   /* 是否允许键盘来操作 */
   keyboardNavigation: true,
   /* 是否按键来操作 */
   showButtons: true,
   /* 是否使用点显示进度 */
   showBullets: false,
   /* 是否显示进度条 */
   showProgress: false,
   /* 是否滑动到高亮的区域 */
   scrollToElement: true,
   /* 遮罩层的透明度 */
   overlayOpacity: 0.9,
   /* 当位置选择自动的时候,位置排列的优先级 */
   positionPrecedence: ['bottom', 'top', 'right', 'left'],
   /* 是否禁止与元素的相互关联 */
   disableInteraction: false,
   /* 是否在第一步隐藏上一步 */
   // hidePrev: true,
   /* 是否在最后一步隐藏下一步 */
   // hideNext: true,
   /* steps步骤,可以写个工具类保存起来 */
   steps: [
     {
       // title: 'Welcome',
       element: '#step1',
       intro: '步骤1:step1!',
       position: 'bottom',
     },
     {
       element: '#step2',
       intro: '步骤2:step2!',
       position: 'bottom',
     },
     {
       element: '#step3',
       intro: '步骤3:step3!',
       position: 'bottom',
     },
     {
       element: '#step4',
       intro: `<div class="intro4">
           你好
           <img src="https://images.unsplash.com/photo-1608096299210-db7e38487075?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" />
       </div>`,
       position: 'bottom',
     },
   ],
 }).oncomplete(() => {
   // 点击结束按钮后执行的事件
   console.log('oncomplete');
 }).onexit(() => {
   // 点击跳过按钮后执行的事件
   console.log('onexit');
 })
   .onchange(() => {
   // 点击下一步执行的事件
     console.log('onchange');
   })
   .start();
})
</script>

<style scoped lang="scss">
 .container{
   font-family: 'Helvetica Neue';
   font-style: normal;
   font-weight: 500;
   font-size: 24px;
   line-height: 32px;
   color: #171B23;
   .header{
     color: #434C5B;
     font-family: 'PingFang SC';
   }
 }
</style>
<style lang="scss">
.intro4{
   width: 100%;
   display: flex;
   align-items: center;
   flex-direction: column;
   img{
     width: 100%;
   }
 }
.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>

好的,下面是一个使用 Intro.js 生成引导面的示例代码。这个示例中,我们将介绍如何创建一个简单的引导面,并使用一些样式来美化它: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Intro.js 示例</title> <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/intro.js/3.3.1/introjs.min.css"> <style> .introjs-tooltip { max-width: 400px; border-radius: 3px; box-shadow: 0 0 20px rgba(0,0,0,0.3); background-color: #fff; color: #333; } .introjs-arrow { border-top-color: #fff; } .introjs-tooltipbuttons { text-align: center; } .introjs-button { background-color: #e1e1e1; color: #333; border-radius: 3px; padding: 5px 10px; margin: 5px; cursor: pointer; } .introjs-button:hover { background-color: #d2d2d2; } .introjs-button:focus { outline: none; } </style> </head> <body> <h1>Intro.js 示例</h1> <p>这是一个使用 Intro.js 创建的引导面示例。</p> <button id="startBtn">开始引导</button> <script src="https://cdnjs.cloudflare.com/ajax/libs/intro.js/3.3.1/intro.min.js"></script> <script> document.getElementById("startBtn").addEventListener("click", function() { introJs().setOptions({ steps: [ { element: document.querySelector('h1'), intro: "这是面的标题。" }, { element: document.querySelector('p'), intro: "这是面的主体内容。" }, { element: document.querySelector('#startBtn'), intro: "这是开始引导按钮。", position: 'bottom' } ], showBullets: false, exitOnOverlayClick: false, exitOnEsc: false }).start(); }); </script> </body> </html> ``` 在这个示例中,我们使用了一些 CSS 样式来美化 Intro.js 的工具提示框和按钮。我们还使用了 `setOptions()` 方法来设置引导面的参数选项,例如 `steps`、`showBullets`、`exitOnOverlayClick` 和 `exitOnEsc` 等。最后,我们在按钮的点击事件中调用 `introJs().start()` 方法启动引导面。 你可以根据自己的需求调整这个示例代码,以生成自己的引导面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值