页面引导解决方案分享

前言

本文主要介绍的是我们在项目中有时候会遇到需要一步一步引导用户操作的使用场景,类似于新手教学的操作指引,给出的解决方案是Intro.js 库,通过此库创建引导式用户体验。

介绍

Intro.js 是一个轻量级的 JavaScript 库,用于创建网站或应用程序的导览(tutorial)和引导(onboarding)体验。它的主要作用包括:

  1. 用户引导:帮助新用户快速熟悉界面和功能,通过步步引导他们了解关键元素。
  2. 增强用户体验:通过可视化的提示和步骤,提高用户的学习效率,减少使用过程中的困惑。
  3. 定制化:提供灵活的配置选项,允许开发者自定义每个步骤的内容、样式及行为。
  4. 支持异步操作:允许在每一步之间执行异步操作,比如加载数据或发送请求,以确保信息的及时性和准确性。
  5. 易于集成:可以方便地与现有的网站或应用集成,支持多种框架和平台。

安装

  • 通过CDN引入

    html 复制代码
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/intro.js/minified/introjs.min.css">
    <script src="https://cdn.jsdelivr.net/npm/intro.js/minified/intro.min.js"></script>
  • npm

    js 复制代码
    npm install intro.js --save
  • yarn

    js 复制代码
    yarn add intro.js

基本用法

初始化引导

在你的 JavaScript 文件中,首先需要初始化 Intro.js:

javascript 复制代码
// 创建一个新的 Intro.js 实例
const intro = introJs();

// 配置引导步骤
intro.setOptions({
  steps: [
    {
      intro: '欢迎使用我们的应用!'
    },
    {
      element: '#step1',
      intro: '这是第一个重要的功能。',
      position: 'right'
    },
    {
      element: '#step2',
      intro: '这里是第二个功能。',
      position: 'bottom'
    }
  ]
});

// 启动引导
intro.start();
自定义选项

通过 setOptions 方法自定义引导的行为和样式,例如:

  • 跳过按钮:允许用户跳过引导。
  • 使用键盘导航:启用键盘操作以进行引导。
  • 主题:选择不同的主题样式。
javascript 复制代码
intro.setOptions({
  skipLabel: '跳过',
  nextLabel: '下一步',
  prevLabel: '上一步',
  doneLabel: '完成',
  hidePrev: true,
  hideNext: false
});
示例
  1. 以下是一个完整的示例,展示如何在一个简单的 HTML 页面中实现 Intro.js:

    javascript 复制代码
    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Intro.js 示例</title>
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/intro.js/minified/introjs.min.css">
        <script src="https://cdn.jsdelivr.net/npm/intro.js/minified/intro.min.js"></script>
        <style>
            #step1, #step2 {
                margin: 20px;
                padding: 20px;
                border: 1px solid #ccc;
            }
        </style>
    </head>
    <body>
    
    <div id="step1">功能 1</div>
    <div id="step2">功能 2</div>
    <button id="startButton">开始引导</button>
    
    <script>
        document.getElementById('startButton').addEventListener('click', function() {
            const intro = introJs();
            intro.setOptions({
                steps: [
                    {
                        intro: '欢迎使用我们的应用!'
                    },
                    {
                        element: '#step1',
                        intro: '这是第一个重要的功能。',
                        position: 'right'
                    },
                    {
                        element: '#step2',
                        intro: '这里是第二个功能。',
                        position: 'bottom'
                    }
                ]
            });
            intro.start();
        });
    </script>
    
    </body>
    </html>
  2. 在Vue文件中使用

    • 效果图:

    • 代码

      vue 复制代码
      <template>
      	<div class="second">
      		<div id="step1">功能 1</div>
      		<div id="step2">功能 2</div>
      		<el-button id="startButton" @click="startGuide">开始引导</el-button>
      	</div>
      </template>
      
      <script lang="ts">
      import {
      	computed,
      	ref,
      	reactive,
      	onMounted,
      	onBeforeUnmount,
      	watch,
      	toRefs,
      	nextTick,
      } from "vue";
      import intro from "intro.js";
      import "intro.js/minified/introjs.min.css";
      
      export default {
      	name: "second",
      	props: {},
      	components: {},
      	setup(props, context) {
      		const startGuide = () => {
      			const introInstance = intro();
      			introInstance.setOptions({
      				steps: [
      					{
      						intro: "欢迎使用我们的应用!",
      					},
      					{
      						element: "#step1" as string | HTMLElement,
      						title: "功能1",
      						intro: "这是第一个重要的功能。",
      						position: "right",
      					},
      					{
      						element: "#step2" as string | HTMLElement,
      						title: "功能2",
      						intro: "这里是第二个功能。",
      						position: "bottom",
      					},
      				],
      			});
      			introInstance.start();
      		};
      
      		onMounted(() => {});
      		return {
      			startGuide,
      		};
      	},
      };
      </script>
      
      <style lang="scss" scoped>
      .second {
      	height: 100%;
      	width: 100%;
      	padding: 20px;
          display: flex;
          flex-direction: column;
          align-items: center;
          justify-content: center;
      	#step1,
      	#step2 {
      		border: 1px solid #ccc;
      		margin-bottom: 20px;
              width: 400px;
              height: 40px;
              line-height: 40px;
              text-align: center;
      	}
      }
      </style>

!CAUTION

提示框的位置也就是position字段的值是自适应的,取决于目标元素的位置。例如:当目标元素在顶部时,设置position为top是无效的

样例参考

API

配置项

HTML Attributes

相关推荐
wgod4 分钟前
new AbortController()
前端
UXbot11 分钟前
UXbot 是什么?一句指令生成完整应用的 AI 工具
前端·ai·交互·个人开发·ai编程·原型模式·ux
棒棒的唐26 分钟前
WSL2用npm安装的openclaw,无法正常使用openclaw gateway start启动服务的问题
前端·npm·gateway
哔哩哔哩技术34 分钟前
使用Compose Navigation3进行屏幕适配
前端
咬人喵喵1 小时前
E2.COOL 平台深度解析:从特效分类到实战操作指南
前端·编辑器·svg
RisunJan2 小时前
Linux命令-named-checkzone
linux·前端
小陈工2 小时前
Python Web开发入门(十):数据库迁移与版本管理——让数据库变更可控可回滚
前端·数据库·人工智能·python·sql·云原生·架构
吹晚风吧3 小时前
解决vite打包,base配置前缀,nginx的dist包找不到资源
服务器·前端·nginx
weixin199701080163 小时前
《施耐德商品详情页前端性能优化实战》
前端·性能优化
不想上班只想要钱3 小时前
模板里 item.xxx 报错 ,报 item的类型为未知
前端·vue