页面引导解决方案分享

news2024/10/9 23:44:37

前言

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

介绍

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

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

安装

  • 通过CDN引入

    <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

    npm install intro.js --save
    
  • yarn

    yarn add intro.js
    

基本用法

  1. 初始化引导

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

    // 创建一个新的 Intro.js 实例
    const intro = introJs();
    
    // 配置引导步骤
    intro.setOptions({
      steps: [
        {
          intro: '欢迎使用我们的应用!'
        },
        {
          element: '#step1',
          intro: '这是第一个重要的功能。',
          position: 'right'
        },
        {
          element: '#step2',
          intro: '这里是第二个功能。',
          position: 'bottom'
        }
      ]
    });
    
    // 启动引导
    intro.start();
    
  2. 自定义选项

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

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

      <!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文件中使用

      • 效果图:
        在这里插入图片描述

      • 代码

        <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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2200393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文精读:基于概率教师学习的跨域自适应目标检测(ICML2022)

原文标题&#xff1a;Learning Domain Adaptive Object Detection with Probabilistic Teacher 中文标题&#xff1a;基于概率教师学习的域自适应目标检测 代码地址&#xff1a; GitHub - hikvision-research/ProbabilisticTeacher: An official implementation of ICML 2022 p…

信息安全工程师(42)VPN类型和实现技术

前言 VPN&#xff08;Virtual Private Network&#xff0c;虚拟专用网络&#xff09;是一种在公共网络上建立专用网络连接的技术。 一、VPN类型 VPN可以根据不同的分类标准划分为多种类型&#xff0c;主要包括以下几种&#xff1a; 按协议分类&#xff1a; PPTP&#xff08;Poi…

JAVA实现公众号扫码登录和关注功能实战

前言 使用第三方插件 <dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-mp</artifactId><version>4.6.0</version> </dependency>准备APPID和appSecet 登录微信公众号后台&#xff0c;复制ap…

防火墙的混合模式配置

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…

刘洋,一个爱 drink 的好运程序员|MarsCoders 开发者说

「MarsCoders 开发者说」是 AI 时代下各类技术栈、各种经历的开发者的故事记录&#xff0c;我们捕捉并再现他们在技术洪流中的职场蜕变与角色定位重塑&#xff0c;希望给更多开发者带来启发。 同时&#xff0c;该系列也记录了众多豆包MarsCode 用户和 AI 爱好者们的实践案例&am…

ICE/TURN/STUN/Coturn服务器搭建

ICE 当我们想要实现在公网环境下的语音/视频通话功能时&#xff0c;就需要用到ICE交互式连接建立。ICE不是一种协议&#xff0c;整合了 STUN 和 TURN 两种协议&#xff08;用于 NAT 穿透&#xff09;的框架。 ICE的主要目标是解决NAT&#xff08;网络地址转换&#xff09;穿越…

5分钟英文论文降重工具:DeepL【翻译、改写、缩写】

关注B站可以观看更多实战教学视频&#xff1a;hallo128的个人空间 5分钟英文论文降重工具&#xff1a;DeepL【翻译、改写、缩写】 视频学习&#xff1a;5分钟英文论文降重工具&#xff1a;DeepL【翻译、改写、缩写】 DeepL网址 官方网址&#xff1a;https://www.deepl.com/zh/…

超越单线程:Web Worker 在前端性能中的角色

在当今快速发展的数字时代&#xff0c;用户对网页性能的期待已经达到了前所未有的高度&#xff0c;想象一下&#xff0c;当你打开一个网站&#xff0c;瞬间加载、流畅操作&#xff0c;没有任何卡顿和延迟&#xff0c;这种体验无疑会让你倍感惊喜。然而在前端开发中&#xff0c;…

机器学习——多模态学习

多模态学习&#xff1a;机器学习领域的新视野 引言 多模态学习&#xff08;Multimodal Learning&#xff09;是机器学习中的一个前沿领域&#xff0c;它涉及处理和整合来自多个数据模式&#xff08;如图像、文本、音频等&#xff09;的信息。随着深度学习的蓬勃发展&#xff0…

编译链接的过程发生了什么?

一&#xff1a;程序的翻译环境和执行环境 在 ANSI C 的任何一种实现中&#xff0c;存在两个不同的环境。 第 1 种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。 第 2 种是执行环境&#xff0c;它用于实际执行代码 也就是说&#xff1a;↓ 1&#xff1…

纠删码参数自适应匹配问题ECP-AMP实验方案(下)

7.参数选择 7.1.综合性能goal 根据权重和性能指标&#xff0c;本方案为每个文件确定最佳的纠删码参数&#xff0c;并将文件分组到不同的数据池中。本文使用了以下公式计算每个文件的评分&#xff0c;表示该文件在使用不同的纠删码参数时的综合性能。 s i j k ∑ j 1 6 c j…

2023 CCPC哈尔滨 报告

比赛链接&#xff1a;Dashboard - 10.6组队训练赛-2023CCPC哈尔滨站 - Codeforceshttps://codeforces.com/group/w6iGs8kreW/contest/552949 做题数&#xff1a;3 题 三题都是队友写的。所以来补一下 B L J。 B题&#xff1a; B. Memory Little G used to be a participant …

【MySQL】基本查询(上):创建、读取

1.Create(创建) 语法&#xff1a; INSERT [INTO] table_name [(column [, column] ...)] VALUES (value_list) [, (value_list)] ...value_list: value, [, value] ... 接下来我们用这个下表作为例子&#xff1a; -- 创建一张学生表 CREATE TABLE students ( id INT UNSIGN…

Http 协议和 RPC 协议有什么区别?

Http 协议和 RPC 协议有什么区别&#xff1f; 三个层面来述说&#xff1a; 从功能特性来说&#xff1a; HTTP是一个属于应用层的超文本传输协议&#xff0c;是万维网数据通信的基础&#xff0c;主要服务在网页端和服务端的数据传输上。 RPC是一个远程过程调用协议&#xff0…

【JS】哈希法解决两数之和

思路 使用哈希法&#xff1a;需要快速查询一个元素是否出现过&#xff0c;或者一个元素是否在集合里时 本题需要一个集合来存放我们遍历过的元素&#xff0c;然后在遍历数组的时候去询问这个集合&#xff0c;符合要求的某元素是否遍历过&#xff0c;也就是 是否出现在这个集合。…

【算法】链表:24.两两交换链表中的节点

目录 1、题目链接 2、题目介绍 3、解法 4、代码 1、题目链接 24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 2、题目介绍 3、解法 引入伪头节点&#xff1a; 为了处理头节点可能被交换的情况&#xff0c;我们引入一个伪头节点&#xff08;dummy no…

jenkins远程调用

curl -G -d tokenfetch_coverage_token&systemmes2&typefull&envsit&resetno http://remote_user:1172e3d5524629fabef5dd55c652646232192.168.36.196:8080/job/fetch_coverage/buildWithParameters 在jenkins的用户界面设置一个token就可以了 remote_user 为…

Android笔记(二十四)基于Compose组件的MVVM模式和MVI模式的实现

仔细研究了一下MVI(Model-View-Intent)模式&#xff0c;发现它和MVVM模式非常的相识。在采用Android JetPack Compose组件下&#xff0c;MVI模式的实现和MVVM模式的实现非常的类似&#xff0c;都需要借助ViewModel实现业务逻辑和视图数据和状态的传递。在这篇文章中&#xff0c…

ESP32-C3实现UART

配置串口参数 在编写代码之前&#xff0c;你需要确定要使用的 UART 端口号和配置参数&#xff08;波特率、数据位、停止位等&#xff09;。 // 定义 UART 端口 #define TX_PIN 1 // TX 管脚 #define RX_PIN 3 // RX 管脚// 定义串口配置参数 #define UART_BAUDRATE 115200 // …

springboot 项目使用 gitlab 的 API

springboot 项目使用 gitlab 的 API 前言获取用户 access tokenSpring boot项目集成GitLab依赖1 pom依赖2 配置文件3 启动类4 核心代码gitlab 的 API 说明前言 需求是通过gitlab的api获取其中的数据。 gitlab官方API文档:https://docs.gitlab.com/ee/api/users.html gitla…