css中pointer-events:none属性对div里面元素的鼠标事件的影响

news2024/11/24 20:33:56

文章目录

  • 前倾提要
  • 当没有设置属性pointer-events时候
    • 结果
  • 当子元素设置了pointer-events: none
    • 修改后的代码
    • 结果如下所示
  • 当父元素设置了pointer-events: none
  • 若两个div同级也就是兄弟级

前倾提要

在gis三维开发的地图组件上放一个背景图片,左右两侧的颜色渐变等,或者gis三维地图上放一张设计过的图片作为地球覆盖在上面的背景时就很有用,即使整个div覆盖在地球上,也不影响操作三维地球。当然也可以通过定位的方式,在地球组件上的两侧创建两个div,然后设置背景颜色,左右两侧的div占一部分宽度。中间啥都没有,也不影响地球操作。但是左右两侧对应宽度的范围也会影响点击操作。

当没有设置属性pointer-events时候

有如下代码,如果我有两个div,其中第一个div有一个按钮,第二个div通过子绝父相的形式定位,覆盖在第一个div上面。这时就会有一个问题,覆盖在上面的div的鼠标事件就会影响第一个div的事件,也就是说,第一个div的按钮点不到,因为覆盖在上面了,上面的div挡住了点击第一个div的按钮。具体代码和结果如下所示:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>pointer-events: none;</title>
  <style>
    .parent {
      width: 800px;
      height: 600px;
      background-color: rgba(44, 245, 228, 0.829);
      position: relative;
      display: flex;
      justify-content: center;
      align-items: center;
    }
    .child {
      width: 800px;
      height: 600px;
      background-color: rgba(214, 57, 201, 0.699);
      position: absolute;
      top: 0;
      left: 0;
    }
  </style>
</head>
<body>
  <div class="parent">
    <button id="buttonClick">父元素按钮点击事件</button>
    <div class="child">子元素</div>
  </div>
  <script>

    function handleClick() {
      alert('点击了父元素里面的按钮!!!');
    }

    document.querySelector('#buttonClick').addEventListener('click', handleClick);

    // document.querySelector('.parent').addEventListener('click', handleClick);

    document.querySelector('.parent').addEventListener('click', function() {
      alert('点击父元素');
    });

    document.querySelector('.child').addEventListener('click', function() {
      alert('点击了子元素');
    });
  </script>
</body>
</html>

结果

结果如下所示:

在这里插入图片描述
在这里插入图片描述

可以发现我们无法点击到父元素中的按钮。那如果我需要覆盖的子div的颜色作为父元素的背景,然后又不影响父元素的点击按钮,那么我们该如何设置呢?具体往下看就知道了。这里有一个应用场景,在gis三维开发的地图组件上放一个背景图片,左右两侧的颜色渐变等,或者gis三维地图上放一张设计过的图片作为地球覆盖在上面的背景时就很有用,即使整个div覆盖在地球上,也不影响操作三维地球。当然也可以通过定位的方式,在地球组件上的两侧创建两个div,然后设置背景颜色,左右两侧的div占一部分宽度。中间啥都没有,也不影响地球操作。但是左右两侧对应宽度的范围也会影响点击操作。具体修改如下所示

当子元素设置了pointer-events: none

修改后的代码

在子组件添加对应的css属性pointer-events: none;,具体如下所示。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>pointer-events: none;</title>
  <style>
    .parent {
      width: 800px;
      height: 600px;
      background-color: rgba(44, 245, 228, 0.829);
      position: relative;
      display: flex;
      justify-content: center;
      align-items: center;
    }
    .child {
      width: 800px;
      height: 600px;
      background-color: rgba(214, 57, 201, 0.699);
      position: absolute;
      top: 0;
      left: 0;
      pointer-events: none;
    }
  </style>
</head>
<body>
  <div class="parent">
    <button id="buttonClick">父元素按钮点击事件</button>
    <div class="child">子元素</div>
  </div>
  <script>

    function handleClick() {
      alert('点击了父元素里面的按钮!!!');
    }

    document.querySelector('#buttonClick').addEventListener('click', handleClick);

    // document.querySelector('.parent').addEventListener('click', handleClick);

    document.querySelector('.parent').addEventListener('click', function() {
      alert('点击父元素');
    });

    document.querySelector('.child').addEventListener('click', function() {
      alert('点击了子元素');
    });
  </script>
</body>
</html>

结果如下所示

在这里插入图片描述
在这里插入图片描述
从结果可以看出,子元素的点击事件失效了。这是又有一个问题了,设置了pointer-events: none;之后,子元素中的按钮事件会不会受到影响呢?具体代码和结果如下所示:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>pointer-events: none;</title>
  <style>
    .parent {
      width: 800px;
      height: 600px;
      background-color: rgba(44, 245, 228, 0.829);
      position: relative;
      display: flex;
      justify-content: center;
      align-items: center;
    }

    .child {
      width: 800px;
      height: 600px;
      background-color: rgba(214, 57, 201, 0.699);
      position: absolute;
      top: 0;
      left: 0;
      pointer-events: none;
    }
  </style>
</head>

<body>
  <div class="parent">
    <button id="buttonClick">父元素按钮点击事件</button>
    <div class="child">
      <div>子元素</div>
      <div>
        <button id="childButtonClick">子元素按钮点击事件</button>
      </div>
    </div>
  </div>
  <script>

    function handleClick() {
      alert('点击了父元素里面的按钮!!!');
    }

    document.querySelector('#buttonClick').addEventListener('click', handleClick);

    // document.querySelector('.parent').addEventListener('click', handleClick);

    document.querySelector('.parent').addEventListener('click', function () {
      alert('点击父元素');
    });

    document.querySelector('.child').addEventListener('click', function () {
      alert('点击了子元素');
    });

    document.querySelector('#childButtonClick').addEventListener('click', function () {
      alert('点击了子元素里面的按钮,子元素按钮点击事件');
    });

  </script>
</body>

</html>

在这里插入图片描述
在这里插入图片描述
从上图可以发现,设置了pointer-events: none;之后,子元素里面的元素点击也失效了。要想让子元素的按钮单击事件生效,我们可以在子元素对应的按钮的div或者按钮上设置pointer-events: auto;即可,具体代码如下所示:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>pointer-events: none;</title>
  <style>
    .parent {
      width: 800px;
      height: 600px;
      background-color: rgba(44, 245, 228, 0.829);
      position: relative;
      display: flex;
      justify-content: center;
      align-items: center;
    }

    .child {
      width: 800px;
      height: 600px;
      background-color: rgba(214, 57, 201, 0.699);
      position: absolute;
      top: 0;
      left: 0;
      pointer-events: none;
    }

    .child-button {
      pointer-events: auto;
    }

  </style>
</head>

<body>
  <div class="parent">
    <button id="buttonClick">父元素按钮点击事件</button>
    <div class="child">
      <div>子元素</div>
      <div class="child-button">
        <button id="childButtonClick">子元素按钮点击事件</button>
      </div>
    </div>
  </div>
  <script>

    function handleClick() {
      alert('点击了父元素里面的按钮!!!');
    }

    document.querySelector('#buttonClick').addEventListener('click', handleClick);

    // document.querySelector('.parent').addEventListener('click', handleClick);

    // document.querySelector('.parent').addEventListener('click', function () {
    //   alert('点击父元素');
    // });

    // document.querySelector('.child').addEventListener('click', function () {
    //   alert('点击了子元素');
    // });

    document.querySelector('#childButtonClick').addEventListener('click', function () {
      alert('点击了子元素里面的按钮,子元素按钮点击事件');
    });

  </script>
</body>

</html>

结果如下所示
在这里插入图片描述
在这里插入图片描述
也就是说,这里子元素和父元素点击都生效了。

当父元素设置了pointer-events: none

在父元素没有设置了pointer-events: none; 的时候。

代码如下所示

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>pointer-events: none;</title>
  <style>
    .parent {
      width: 800px;
      height: 600px;
      background-color: rgba(44, 245, 228, 0.829);
      position: relative;
      display: flex;
      justify-content: center;
      align-items: center;
    }

  </style>
</head>

<body>
  <div class="parent">
    <button id="buttonClick">父元素按钮点击事件</button>
    </div>
  </div>
  <script>

    document.querySelector('#buttonClick').addEventListener('click', function() {
      alert('点击了父元素里面的按钮!!!');
    });

  </script>
</body>

</html>

结果如下所示

在这里插入图片描述
可以发现里面的元素是能够正常点击的。当设置了pointer-events: none; 的时候。
代码如下所示:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>pointer-events: none;</title>
  <style>
    .parent {
      width: 800px;
      height: 600px;
      background-color: rgba(44, 245, 228, 0.829);
      position: relative;
      display: flex;
      justify-content: center;
      align-items: center;
      pointer-events: none;
    }

  </style>
</head>

<body>
  <div class="parent">
    <button id="buttonClick">父元素按钮点击事件</button>
    </div>
  </div>
  <script>

    document.querySelector('#buttonClick').addEventListener('click', function() {
      alert('点击了父元素里面的按钮!!!');
    });

  </script>
</body>

</html>

结果如下所示:
在这里插入图片描述
当按钮设置了pointer-events: auto;之后。代码如下所示。

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>pointer-events: none;</title>
  <style>
    .parent {
      width: 800px;
      height: 600px;
      background-color: rgba(44, 245, 228, 0.829);
      position: relative;
      display: flex;
      justify-content: center;
      align-items: center;
      pointer-events: none;
    }

    .child {
      pointer-events: auto;
    }

  </style>
</head>

<body>
  <div class="parent">
    <button class="child" id="buttonClick">父元素按钮点击事件</button>
    </div>
  </div>
  <script>

    document.querySelector('#buttonClick').addEventListener('click', function() {
      alert('点击了父元素里面的按钮!!!');
    });

  </script>
</body>

</html>

结果
在这里插入图片描述
如果子元素不是内嵌到父div中时,而是以定位的方式定位到父元素上方时。
代码如下所示

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>pointer-events: none;</title>
  <style>
    .parent {
      width: 800px;
      height: 600px;
      background-color: rgba(44, 245, 228, 0.829);
      position: relative;
      display: flex;
      justify-content: center;
      align-items: center;
      pointer-events: none;
    }

    .child {
      pointer-events: auto;
    }

    .position-absolute {
      position: absolute;
      top: 0;
      left: 0;
    }
  </style>
</head>

<body>
  <div class="parent">
    <button class="child" id="buttonClick">父元素按钮点击事件</button>
    <div class="position-absolute">
      <button id="divButton">这是定位的div按钮点击事件</button>
    </div>
  </div>
  </div>
  <script>

    document.querySelector('#buttonClick').addEventListener('click', function () {
      alert('点击了父元素里面的按钮!!!');
    });

    document.querySelector('#divButton').addEventListener('click', function () {
      alert('这是定位-定位-定位-的按钮点击事件');
    });


  </script>
</body>

</html>

结果如下所示

在这里插入图片描述
在这里插入图片描述

当定位的div里面的按钮设置了pointer-events: auto;之后。代码如下所示。

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>pointer-events: none;</title>
  <style>
    .parent {
      width: 800px;
      height: 600px;
      background-color: rgba(44, 245, 228, 0.829);
      position: relative;
      display: flex;
      justify-content: center;
      align-items: center;
      pointer-events: none;
    }

    .child {
      pointer-events: auto;
    }

    .position-absolute {
      position: absolute;
      top: 0;
      left: 0;
      pointer-events: auto;
    }
  </style>
</head>

<body>
  <div class="parent">
    <button class="child" id="buttonClick">父元素按钮点击事件</button>
    <div class="position-absolute">
      <button id="divButton">这是定位的div按钮点击事件</button>
    </div>
  </div>
  </div>
  <script>

    document.querySelector('#buttonClick').addEventListener('click', function () {
      alert('点击了父元素里面的按钮!!!');
    });

    document.querySelector('#divButton').addEventListener('click', function () {
      alert('这是定位-定位-定位-的按钮点击事件');
    });


  </script>
</body>

</html>

结果如下所示
在这里插入图片描述
在这里插入图片描述

若两个div同级也就是兄弟级

若两个div同级也就是兄弟级,一个设置了pointer-events: none,并不影响另外一个div的点击事件,另一个div可以是定位的也可以是非定位的。都不影响div的点击事件,因为是兄弟级别的。所以不影响,具体看下面代码的child1、child2、child3是兄弟级别的,其中child1设置了pointer-events: none,child2、child3什么都没有设置。具体代码如下所示:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>pointer-events: none;</title>
  <style>
    .parent {
      width: 800px;
      height: 600px;
      background-color: rgba(44, 245, 228, 0.829);
      position: relative;
      display: flex;
      justify-content: center;
      align-items: center;
    }

    .child1 {
      pointer-events: none;
    }

    .child2 {
      position: absolute;
      top: 0;
      left: 0;
    }
    .child3 {
      margin-left: 24px;
    }
  </style>
</head>

<body>
  <div class="parent">
    <button class="child1" id="buttonClick">child1-child1-按钮点击事件</button>
    <div class="child2">
      <button id="divButton">child2-child2-按钮点击事件</button>
    </div>
    <div class="child3">
      <button id="divButton3">child3-child-3-按钮点击事件</button>
    </div>
  </div>
  </div>
  <script>

    document.querySelector('#buttonClick').addEventListener('click', function () {
      alert('点击了父元素里面的按钮!!!');
    });

    document.querySelector('#divButton').addEventListener('click', function () {
      alert('这是child2-child2-child2-的按钮点击事件');
    });

    document.querySelector('#divButton3').addEventListener('click', function () {
      alert('这是child3-child3-child3-的按钮点击事件');
    });


  </script>
</body>

</html>

结果如下所示:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

中科蓝汛GPIO操作说明

概述 本篇文章介绍如何使用中科蓝汛AB5681&#xff0c;GPIO管脚使用说明。 一、第一种写法 1&#xff09;、GPIO配置输入模式 //内部上拉 GPIOBDE | BIT(4); //数字IO使能: 0为模拟IO, 1 为数字IO GPIOBDIR | BIT(4); //控制IO的方向: 0为输出, 1为输入. GPIOBFEN &…

Kotlin 协程使用及其详解

Kotlin协程&#xff0c;好用&#xff0c;但是上限挺高的&#xff0c;我一直感觉自己就处于会用&#xff0c;知其然不知其所以然的地步。 做点小总结&#xff0c;比较浅显。后面自己再继续补充吧。 一、什么是协程&#xff1f; Kotlin 协程是一种轻量级的并发编程方式&#x…

LabVIEW 离心泵机组故障诊断系统

开发了一套基于LabVIEW图形化编程语言设计的离心泵机组故障诊断系统。系统利用先进的数据采集技术和故障诊断方法&#xff0c;通过远程在线监测与分析&#xff0c;有效提升了离心泵的预测性维护能力&#xff0c;保证了石油化工生产的连续性和安全性。 项目背景及意义 离心泵作…

线程函数和线程启动的几种不同形式

线程函数和线程启动的几种不同形式 在C中&#xff0c;线程函数和线程启动可以通过多种形式实现。以下是几种常见的形式&#xff0c;并附有相应的示例代码。 1. 使用函数指针启动线程 最基本的方式是使用函数指针来启动线程。 示例代码&#xff1a; #include <iostream&g…

辐射传输方程的分解

Decomposition of the Boundary Value Problem for Radiative Transfer Equation of MODIS and MISR instruments 0.Notions Let L L L be the straming-collision operator, and S S S is scattering operator: L I Ω ⋅ ∇ I ( r , Ω ) σ ( r , Ω ) I ( r , Ω ) S…

智会智展,活动必备

智会智展 APP 各大应用市场均可下载统一链接https://m.malink.cn/s/r6nQVf

Hive操作库、操作表及数据仓库的简单介绍

数据仓库和数据库 数据库和数仓区别 数据库与数据仓库的区别实际讲的是OLTP与OLAP的区别 操作型处理(数据库)&#xff0c;叫联机事务处理OLTP&#xff08;On-Line Transaction Processing&#xff09;&#xff0c;也可以称面向用户交易的处理系统&#xff0c;它是针对具体业务…

如何选择适合小团队的项目管理工具?免费与开源软件推荐

目录 一、小团队项目管理工具的重要性 二、热门项目管理工具介绍 &#xff08;一&#xff09;禅道 &#xff08;二&#xff09;Trello &#xff08;三&#xff09;Asana &#xff08;四&#xff09;JIRA 三、免费项目管理软件推荐 &#xff08;一&#xff09;ES 管理器 …

kafka如何获取 topic 主题的列表?

大家好&#xff0c;我是锋哥。今天分享关于【kafka如何获取 topic 主题的列表&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka如何获取 topic 主题的列表&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中&#xff0c;可以…

Maven详解—(详解Maven,包括Maven依赖管理以及声明周期,Maven仓库、idea集成Maven)

文章目录 Maven详解一.初始Maven1.1 概述1.2 作用 二.Maven模型2.1 概述2.2 构建生命周期/阶段2.3 项目对象模型2.4 依赖管理模型 三.Maven仓库四.Maven安装4.1 下载4.2 安装步骤 五.Idea集成Maven Maven详解 一.初始Maven 1.1 概述 Maven是Apache旗下的一个开源项目&#x…

虚拟滚动 - 从基本实现到 Angular CDK

简介 在大数据列表的处理上&#xff0c;虚拟滚动是一种优化性能的有效方式。本篇文章将详细介绍两种常见的虚拟滚动实现方式&#xff1a;使用 transform 属性和 Intersection Observer。重点讲解如何通过 transform 属性实现高效的虚拟滚动&#xff0c;并对比Angular CDK中的实…

Spring Boot 配置文件启动加载顺序

前言 Spring Boot的启动加载顺序是一个涉及多个步骤和组件的过程。Spring Boot通过一系列默认设置简化了应用程序的配置&#xff0c;使得开发者能够快速地搭建和部署应用。为了实现这一目标&#xff0c;Spring Boot采用了一种分层和优先级机制来加载配置文件。 一、Spring Bo…

C# Modbus RTU通讯回顾

涉及技术&#xff1a; 1.使用NMdbus4 库 2.ushort[]转int 记得之前刚学习的时候&#xff0c;是ushort[] → Hex字符串→byte[] → 翻转byte[] →BitConverter.ToInt32()&#xff0c;饶了一大圈&#xff1b;实际上可以直接转&#xff1b;这里也有小细节&#xff1a;使用BitCo…

HFSS学习笔记(五)金属过孔、复制模型带激励等问题(持续更新...)

HFSS学习笔记&#xff08;五&#xff09;金属过孔、复制模型带激励等问题&#xff08;持续更新…&#xff09; 一、金属过孔设计 方法一&#xff1a;用介质减去金属圆柱体&#xff0c;然后再添加金属圆柱体 方法二&#xff1a;嵌入金属圆柱 圆柱过孔选择材料为“copper” HFS…

Late Chunking×Milvus:如何提高RAG准确率

01. 背景 在RAG应用开发中&#xff0c;第一步就是对于文档进行chunking&#xff08;分块&#xff09;&#xff0c;高效的文档分块&#xff0c;可以有效的提高后续的召回内容的准确性。而对于如何高效的分块是个讨论的热点&#xff0c;有诸如固定大小分块&#xff0c;随机大小分…

大屏可视化:舞动数据与美观的“设计秘籍”

大屏可视化鉴赏&#xff1a;踏入软件系统产品设计之旅&#xff0c;让我们一同鉴赏那些闪耀在智慧农业、智慧园区、智慧社区及智慧港口等领域的大屏可视化杰作。每一帧画面&#xff0c;都是科技与创新的完美融合&#xff0c;数据跃然屏上&#xff0c;智慧触手可及。 >> 数…

基于STM32的智能声音跟随小车设计

引言 本项目基于STM32微控制器设计了一个智能声音跟随小车&#xff0c;通过集成麦克风阵列实现声音源定位和跟随功能。该系统可以检测环境中的声音信号&#xff0c;如手掌拍击声或语音指令&#xff0c;驱动小车向声源方向移动。项目涉及硬件设计、声音信号处理算法以及电机控制…

Bruno解决SSL验证问题

在测试接口的时候&#xff0c;我使用的是Bruno这个软件&#xff0c;开源离线的API测试软件。 主页是这样子的 今天在测试一个HTTPS的接口时候&#xff0c;因为这个HTTPS接口是用的是自签证书&#xff0c;所以就报错误了。 Error invoking remote method send-http-request: …

【论文速读】| APOLLO:一种基于 GPT 的用于检测钓鱼邮件并生成警告用户的解释的工具

基本信息 原文标题&#xff1a;APOLLO: A GPT-based tool to detect phishing emails and generate explanations that warn users 原文作者&#xff1a;Giuseppe Desolda, Francesco Greco, Luca Vigan 作者单位&#xff1a;University of Bari “A. Moro”, Italy, King’…

jfrog artifactory oss社区版,不支持php composer私库

一、docker安装 安装环境&#xff1a;centos操作系统&#xff0c;root用户。 如果是mac或ubuntu等操作系统的话&#xff0c;会有许多安装的坑等着你。 一切都是徒劳&#xff0c;安装折腾那么久&#xff0c;最后还是不能使用。这就是写本文的初衷&#xff0c;切勿入坑就对了。 …