css新手引导实现方式总结

news2024/10/6 21:27:47

新手引导功能一般都是用一个半透明的黑色进行遮罩,蒙层上方对界面进行高亮,旁边配以弹窗进行讲解,样式如下

但是由于交互不同,实现方案也不一样,下面就针对不用的交互,总结了不同的实现方法(下文描述时以上面的图片为例)

场景一:点击任意位置关闭新手引导功能

在页面上增加 mask 蒙层覆盖满屏,蒙层内是自定义的讲解文案和按钮等,根据自己需求实现即可。

<body>
    <h1>新手引导功能</h1>
    <button onclick="click1()" class="btn">点我11111111</button>
    <button onclick="click2()" class="btn btn2">点我22222</button>

    <div class="mask" onclick="click3()">
        <div class="tips">
            点击按钮召唤神龙
            <button>知道啦</button>
        </div>
    </div>
</body>

核心样式代码:

  • 给需要高亮的元素设置box-shadow,把spread阴影扩展半径设置成非常大的值,保证能铺满全屏
  • mask 蒙层设置成透明色,fixed 布局,absolute 布局也行,tips 定位到指定位置,这里为了简洁,我随便写的位置,实际应该需要获取一些高亮元素的位置,动态设置 tips 的位置
body {
    position: relative;
}

.btn2 {
    box-shadow: 1px 1px 1px 2000px rgba(0,0,0,.6);
    margin-left: 50px;
}
.mask {
    position: fixed;
    z-index: 999;
    background-color: transparent;
    height: 100%;
    width: 100%;
    top: 0;
    left: 0;
}
.tips {
    position: absolute;
    top: 150px;
    left: 58%;
    background: white;
    width: 300px;
    height: 150px;
    display: flex;
    justify-content: center;
    align-items: center;
}

方法如下:   

<script>
    function click1(){
        alert('1111');
    }
    function click2(){
        alert('22222');
    }
    function click3() {
        // 隐藏新手引导功能
        document.querySelector('.mask').style.display = 'none';
        document.querySelector('.btn2').style.boxShadow = 'none';
    }
</script>

实现效果:

 

场景二:点击【知道啦】关闭新手引导功能,点击其他位置无交互

dom 基本与场景一一致,只是方法绑定在【知道啦】按钮上

<body>
    <h1>新手引导功能</h1>
    <button onclick="click1()" class="btn">点我11111111</button>
    <button onclick="click2()" class="btn btn2">点我22222</button>

    <div class="mask">
        <div class="tips">
            点击按钮召唤神龙
            <button onclick="click3()">知道啦</button>
        </div>
    </div>
</body>

样式代码和方法与场景一一样, 实现效果:

场景三:点击【知道啦】关闭新手引导功能,点击【添加推荐商品】触发相应的方法并关闭新手引导功能,点击其他位置无交互

pointer-events: none实现(不行)

用如上的方式实现我们可以发现,用蒙层覆盖住页面后,下边的方法是不会被触发的,然后就想到一个css 属性 pointer-events: none,这个属性设置后,该dom 上的事件就会不生效,点击会穿透触发到下层的元素。

.mask {
    position: fixed;
    z-index: 999;
    background-color: rgba(0,0,0,.6);
    height: 100%;
    width: 100%;
    top: 0;
    left: 0;
    pointer-events: none;
}

设置后,虽然点击高亮元素,能触发指定方法,但是其他非高亮的元素的点击事件也会触发,这明显不是我们想要的效果呀,所以用这个属性不行

z-index 实现(完美实现)

于是又想到一个办法,就是用 z-index 实现,高亮元素的 z-index 设置大值,mask 蒙层设置成半透明色,实现如下:

body {
    position: relative;
}
.btn2 {
    margin-left: 50px;
    z-index: 1000;
    position: relative;
}
.mask {
    position: fixed;
    z-index: 999;
    background-color: rgba(0,0,0,.6);
    height: 100%;
    width: 100%;
    top: 0;
    left: 0;
}
.tips {
    position: absolute;
    top: 150px;
    left: 58%;
    background: white;
    width: 300px;
    height: 150px;
    display: flex;
    justify-content: center;
    align-items: center;
}

 方法如下:

<script>
    function click1(){
        alert('1111');
    }
    function click2(){
        alert('22222');
        click3();
    }
    function click3() {
        // 隐藏新手引导功能
        document.querySelector('.mask').style.display = 'none';
        document.querySelector('.btn2').style.boxShadow = 'none';
    }
</script>

实现效果:

总结一下,如果不需要场景3这种支持高亮元素点击触发原逻辑的需求,可以直接使用box-shadow实现,如果需要的话,可使用 z-index 实现,当然还有很多其他种实现方法,如果有更好的实现方法,也可以一起交流哦~

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

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

相关文章

路由和寻址的区别

如果说传输层协议&#xff0c;除了 TCP/UDP&#xff0c;我们还可以有其他选择&#xff0c;比如 Google 开发的 QUIC 协议&#xff0c;帮助在传输层支持 HTTP 3.0 传输。但是在网络层&#xff0c;IP 协议几乎一统天下。IP 协议目前主要有两个版本 IPv4 和 IPv6。 根据 Google 统…

开发者一定要知道的 API 管理五大趋势

API First 大势所趋&#xff0c;APIaaS&#xff08;API 作为服务&#xff09;也将受到越来越多企业和组织的选择&#xff0c;研发团队对 API 研发管理工具的要求也水涨船高。 API 在今天的数字化世界中扮演着至关重要的角色&#xff0c;随着云计算、物联网、微服务尤其是 AI 等…

Uniapp 引入uView-ui 插件

前言 最近在写uniapp&#xff0c;用了一下原生的ui框架感觉不是很好看&#xff0c;打算去插件市场上面找一下好看的UI插件。学习不是闭门造车&#xff0c;自己重复造轮子。能自己解决和会不会用别人的方法是两回事。我自己也能写UI界面逻辑&#xff0c;但是这样太费时间了。最…

线宽变大,损耗变小;线宽无限大,损耗无限小?

一博高速先生成员&#xff1a;黄刚 作为高速信号传输的重要的指标之一&#xff0c;损耗&#xff0c;无论是对硬件工程师&#xff0c;设计工程师还是我们SI工程师来说&#xff0c;都会是非常的关注。而对于像背板传输这种长距离的走线系统或是像芯片测试板要求损耗极小的情况&a…

港联证券|港交所内地路演人气爆棚 新一轮上市改革加速推进

5月10日&#xff0c;香港交易所在深圳举行未来科技峰会&#xff0c;拉开了港股特专科技上市新规内地路演推广的序幕。 今年3月底&#xff0c;港交所正式推出特专科技公司上市新规&#xff0c;《主板上市规则》新增18C章&#xff0c;并于3月31日起接收特专科技公司上市申请&…

JavaWeb《后端内容:2. MVC-ServletContext-IOC-事务管理-过滤器Filter》

目录 1. 准备和回顾 2. MVC-reflect 3. MVC-dispatcherServlet 3.1 思路部分 3.2 Debug部分 3.3 基于controller进行优化 4. Servlet-api 4.1 回顾 4.2 Init方法 1. 获取ServletConfig config getServletConfig(); 2. 获取初始化参数值&#xff1a;config.getInitP…

静态库(lib),动态库(dll)

我之前有一篇文章讲过静态链接库和动态链接库&#xff0c;大家可以点击链接去看一下&#xff1a;静态链接库&#xff0c;动态链接库【滴水逆向三期48笔记】&#xff0c;由于不是系统学习Windows编程&#xff0c;感觉那时候就是囫囵吞枣&#xff0c;今天又学习了一遍&#xff0c…

基于Keil生成外部Nor Flash下载算法,并使用J-Flash直接烧录(以W25Q64为例)

需要的软件&#xff1a; Keil STM32CubeMX J-Flash 参考文档&#xff1a; 方法1&#xff1a;在Keil中点击Help→uVision Help&#xff0c;然后再搜索框中输入FLM&#xff0c;点击列出主题&#xff0c;可以看到生成下载算法的大致步骤&#xff1a; 方法2&#xff1a;在ARM Ke…

带你玩转三子棋—【C语言】

目录 前言&#xff1a; 1. 菜单的打印 2. game函数的实现 2.1 初始化棋盘 2.2 显示棋盘 2.3 玩家下棋 2.4 电脑下棋 2.5 判断输赢 2.6 判断棋盘是否满了 3. 全部代码 3.1 game.h 3.2 game.c 3.3 test.c 前言&#xff1a; 为了实现三子棋&#xff0c;首先我们应该…

frp将配置写在代码中重新打包

frp 是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。在有些情况下我们需要隐藏配置信息&#xff0c;尤其是客户端&#xff08;比如我们要在第三方电脑…

第五章 总结及作业(123)【编译原理】

第五章 作业【编译原理】 前言推荐第五章 总结5.1自下而上分析基本问题 5.1.1归约5.1.2规范归约简述5.1.3 符号栈的使用与语法树的表示 5.2 算符优先分析5.2.1算符优先文法及优先表构造算法&#xff1a;构造FIRSTVT集算法&#xff1a;构造LASTVT集算法&#xff1a;构造优先表5.…

Google I/O 2023 - 一文快速总结 Flutter Dart 的现状和未来

随着 Google I/O 2023 的发布&#xff0c; Flutter 3.10 和 Dart 3.0 也都正式发&#xff0c;不得不说如今 Dart 的版本号终于快追上 Flutter 得版本号了&#xff0c;特别随着 Dart 3 的发布&#xff0c; Flutter 在 records 和 patterns 的加持下&#xff0c;开发体验终于开始…

LlamaIndex :面向QA 系统的全新文档摘要索引

在这篇博文中&#xff0c;我们介绍了一种全新的 LlamaIndex 数据结构&#xff1a;文档摘要索引。我们描述了与传统语义搜索相比&#xff0c;它如何帮助提供更好的检索性能&#xff0c;并通过一个示例进行了介绍。 背景 大型语言模型 (LLM) 的核心场景之一是对用户自己的数据进…

MapReduce框架

TextInputFormat 1&#xff09;FileInputFormat实现类 思考&#xff1a;在运行MapReduce程序时&#xff0c;输入的文件格式包括&#xff1a;基于行的日志文件、二进制格式文件、数据库表等。那么&#xff0c;针对不同的数据类型&#xff0c;MapReduce是如何读取这些数据的呢&…

Postman 如何关联接口测试并设置全局变量(带有token鉴权)

一、登陆接口 创建一个request请求 在Tests中添加JavaScript代码&#xff0c;用来获取鉴权&#xff1a; var jsonData JSON.parse(responseBody); var Authorization jsonData.data.access_token; console.log(Authorization) pm.globals.set(‘Authorization’,Authorizatio…

solr快速上手:solr简介及安装(一)

0. 引言 虽然现在主流的搜索引擎组件已经es主导&#xff0c;但不乏有部分“老”项目依旧在采用solr&#xff0c;当遇到这类项目时&#xff0c;如何快速上手solr组件&#xff0c;以及后续如何拓展深入研究solr的途径成为问题&#xff0c;本期我们的目的就是带大家来快速上手sol…

2023 年第三届长三角高校数学建模竞赛赛题浅析

为了更好地让大家本次长三角比赛选题&#xff0c;我将对本次比赛的题目进行简要浅析。数模模型通常分为优化、预测、评价三类&#xff0c;而本次数学题目就正好对应着A、B、C分别为优化、预测、评价。整体难度不大&#xff0c;主要难点在于A题的优化以及B、C的数据收集。稍后&a…

QT5.12.6 + mysql5.5.9 出现 Driver not loaded Driver not loaded

由于我重装了电脑系统&#xff0c;qt 和mysql均进行了软件版本的升级&#xff0c; 在使用数据库模块时&#xff0c;出现了如下问题&#xff1a; Driver not loaded Driver not loaded 排除问题一&#xff1a; pro文件中是否加载了sql模块 查看pro文件&#xff0c;发现 有此模…

React的两种组件创建方式(二)

react是面向组件编程的一种模式&#xff0c;它包含两种组件类型&#xff1a;函数式组件及类式组件 函数式组件 一个基本的函数组件长这个样子 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>hell…

java报错-->java.lang.IllegalAccessError

1、前言 在gradle中运行main方法突然出现如下错误 Exception in thread "main" java.lang.IllegalAccessError: class XXX.util.ImageBorderUtils (in unnamed module 0x4bd4bcd4) cannot access class sun.font.FontDesignMetrics (in module java.desktop) becaus…