支持事件穿透?使用pointer-events样式

  使用绝对定位元素,让元素A完全盖住元素B时,如何通过元素A来响应元素B的事件呢?

  上图可以用下面的SVG代码来实现:

<svg width="200" height="180">
    <rect x="50" y="50" width="50" height="50" fill="#f34b5b" onclick="alert(‘Clicked‘)"></rect>
    <rect x="20" y="20" width="160" height="140" fill="#FEDDCE" opacity="0.8"></rect>
</svg>

  第一个rect被第二个rect完全盖住,因此无法响应onclick事件。在传统解决办法中,我们需要编写JavaScript代码来实现事件穿透,即首先响应第二个rect元素的onclick事件,通过坐标值来判断点击位置是否位于第一个rect元素的范围内,从而决定是否触发第一个rect元素的onclick事件。但是如果图形和图形之间的关系比较复杂的话,自己编写代码工作量会很大,而且代码执行效率也不高。好在我们可以通过一个CSS样式来解决该问题:

pointer-events: none;

  将该样式加到第二个rect元素上,可以很轻松地实现事件穿透效果。该样式可以应用到任何DOM节点上,所有绝对定位的元素都适用,所有现代主流浏览器都已经支持该样式(经测试IE11也已经支持)。

时间: 2024-08-12 10:22:37

支持事件穿透?使用pointer-events样式的相关文章

让 select 的 option 标签支持事件监听(如复制操作)

这标题,让option支持事件监听,应该不难的呀,有什么好讲的? 其实还是有的,默认在浏览器代码是无法直接对option标签进行操作的,不仅包括JS事件监听,还是CSS样式设置 查了一些资料,姑且认为它是系统OS级别处理的 想自定义option的样式,很多人会建议用 <ul> <li> 标签来辅助同步操作与值 想对option进行事件监听,有一个tip:当给select显示设置了size 属性且值 大于1 时,才能监听 近来产品也提了个鼠标操作复制option值的需求,就利用这个s

浏览器 Pointer Events

前言 Pointer Events是一套触控输入处理规格,支持Pointer Events的浏览器包括了IE和Firefox,最近Chrome也宣布即将支持该处理规则. PointerEvent PointEvent对象继承自MouseEvent,使用上也比较类似. mousedown -> pointerdown mouseenter -> pointerenter mouseleave -> pointerleave mousemove -> pointermove mouse

IE8,input事件穿透

连续加班一个半月,项目昨天晚上12:08终于上线了:然后处理了一些新发现的bug:一直熬到凌晨五点半才吃点宵夜回家睡觉.然后下午这会过来上班:回想昨晚的场景,真的跟打仗一样..然后发现了一个比较有意思的bug:称之为"事件穿透"!,问题只在纯IE8浏览器下重现(IE9,10,11的的IE8模式切换不重新). 场景大概是这样的:首页有一个浮动的登录框:然后页头有一个导航(有链接),下面还有一个轮播图,而且有链接:如下图所示: 然后,IE8下,当你准备在输入框输入时,忽然发现点了一下,页面

mobile轮播组件——支持事件回调和队列(原生js实现)

mobile轮播组件,支持图片不定高,支持事件回调,队列,兼容主流webkit浏览器 demo地址:http://7li.github.io/components/swipe/ demo二维码: 测试地址:http://7li.github.io/components/swipe/test/ 仓库地址:https://github.com/7LI/swipe 本文出自:http://blog.csdn.net/nancle/article/details/44937531 仓促之际必有疏漏,请各

POI 读取 Excel 转 HTML 支持 03xls 和 07xlsx 版本 包含样式

工作需求: 提供EXCEL模板上传后预览:EXCEL解析成终端风格HTML. 处理方案: POI解析EXCEL,预览时尽量获取原有表格的样式:终端使用EXCEL解析的无样式HTML,然后通过jQuery添加CSS样式 遇到问题: CSDN上大牛处理03版xls格式的有成功例子:但是07版xlsx格式的样式处理未找到理想中的例子 下文是参考大牛的例子整理后的程序 供参考! EXCEL表格07xlsx格式 通过POI解析带样式的效果 项目JAR文件注意版本 JAVA 1 package com.hb

如何让触摸事件穿透一个View

偶然间发现,如何屏蔽或者让触摸事件穿透一个view是一个很简单的事情. 现象: 源码: // // ViewController.m // UserInteraction // // Created by YouXianMing on 14/10/23. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "ViewController.h" @interface ViewController () @

设计规范,你怎么支持?(二)——静态样式支持

之前上一篇文章中讲了我部门的设计要求统一设计规范,前端也打算同步提供对应的落地方案.下面我就讲讲我的第一步--静态样式支持. 一.前提条件--样式预编译化 在设计规范中有很大一部分是要求设计师对于某些特定的元素,必须按照某些特定的样式规则去设计.换句话说就是:这些规则就是我们前端可以抽象出来的部分,也是我们可以复用的规则和模块.传统CSS是不能一模块的方式来开发的.我们需要借助SASS或LESS等,这种样式预编译工具.我选用的是SASS,至于SASS如何安装,网上文章应该不少,我这里不打算细讲.

转载:事件穿透

前言 小伙伴们在开发中是否遇到过这样的需求呢,一个控件的某个部分被另外一个控件遮挡住,当点击这个重叠部分时,需要响应被遮盖控件的点击事件,就如下图所示 当我们点击区域3时,响应蓝色按钮的点击事件,点击区域1和2时,响应红色按钮的点击事件,对于区域1和3没什么好说的,那如何让红色按钮响应区域2的点击呢?这就是笔者今天要讲的内容. 事件传递 大家应该都知道,事件从应用程序开始,按照从上到下的顺序(UIApplication -> UIWindow -> rootViewController -&g

屏幕事件穿透和拦截分析

事件穿透和拦截机制同样并不是deviceone平台独有的,这个机制几乎是所有和UI相关的技术都共有,了解一下非常有必要.我们会以一个简单的例子来描述事件处理机制运行的过程. 屏幕事件处理机制 我们先假定是手机屏幕显示一个UI,里面包括了4个View,这些View都是树状结构,父View下包含一个或多个子View,其中最上层的View和屏幕大小是一致的,参考下图: 我们可以看到view1有一个子节点view2,view2包含2个子节点view3和view4. 假如我们点击屏幕一个位置,会产生一个事