CN108304242A - 实现鼠标事件穿透的方法、相关存储介质、设备和装置 - Google Patents
实现鼠标事件穿透的方法、相关存储介质、设备和装置 Download PDFInfo
- Publication number
- CN108304242A CN108304242A CN201810114758.6A CN201810114758A CN108304242A CN 108304242 A CN108304242 A CN 108304242A CN 201810114758 A CN201810114758 A CN 201810114758A CN 108304242 A CN108304242 A CN 108304242A
- Authority
- CN
- China
- Prior art keywords
- canvas
- mouse
- mouse event
- layers
- upper layer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
Abstract
本发明提供了一种实现鼠标事件穿透的方法,包括如下步骤:S1,检测是否存在上层DOM元素;S2,若存在所述上层DOM元素,则设置Canvas元素层的CSS属性,以使所述Canvas元素层不响应鼠标事件,此时,所述上层DOM元素响应鼠标事件;若不存在所述上层DOM元素,则执行步骤S3;S3,检测鼠标坐标的位置;S4,若所述鼠标坐标在所述Canvas元素层的子元素的范围内,则设置所述子元素的CSS属性,使所述子元素响应鼠标事件;若所述鼠标坐标的位置不在所述Canvas元素层的子元素范围内,则设置所述Canvas元素层的CSS属性,使所述Canvas元素层不响应鼠标事件,此时,下层DOM元素响应鼠标事件。还涉及相关的计算机可读存储介质、电子设备以及计算装置。
Description
技术领域
本发明涉及互联网开发领域,具体涉及一种实现鼠标事件穿透的方法、相关的计算机可读存储介质、电子设备以及计算装置。
背景技术
随着HTML5技术的普及,其中的Canvas元素(可以理解为一张画布,可以通过API,在其中绘制各种各样的图形),由于表现力强,性能优异,得到越来越广泛的应用。但是,Canvas元素是一整块矩形区域,即使其中没有绘制任何对象,也会占据整个空间,这样,在Canvas元素之下的其他页面元素,会由于Canvas在上面将所有鼠标事件接收了,而无法响应到鼠标事件,很多常见的功能都无法得到实现:比如鼠标手型、点击等。
而且当三个DOM元素层叠,中间是Canvas(Canvas整体是一个DOM元素),Canvas内部又有一些子元素(非DOM)时,传统方案只能做到控制中间Canvas的整个部分响应或是不响应鼠标事件,无法做到根据Canvas中的内容进行区分,只能整体设置为响应手型,同时Canvas中的透明部分,也会阻挡下层接收事件。
因此,有必要提出一种新的实现鼠标事件穿透的方法。
发明内容
有鉴于此,为了克服上述问题的至少一个方面,本发明的实施例提供了一种实现鼠标事件穿透的方法。
根据本发明的一个方面,提供了一种实现鼠标事件穿透的方法,包括步骤:
S1,检测是否存在上层DOM元素;
S2,若存在所述上层DOM元素,则设置Canvas元素层的CSS属性,以使所述Canvas元素层不响应鼠标事件,此时,所述上层DOM元素响应鼠标事件;若不存在所述上层DOM元素,则执行步骤S3;
S3,检测鼠标坐标的位置;
S4,若所述鼠标坐标在所述Canvas元素层的子元素的范围内,则设置所述子元素的CSS属性,使所述子元素响应鼠标事件;若所述鼠标坐标的位置不在所述Canvas元素层的子元素范围内,则设置所述Canvas元素层的CSS属性,使所述Canvas元素层不响应鼠标事件,此时,下层DOM元素响应鼠标事件。
进一步地,步骤S1包括:
S11,利用elementFormPoint全局函数获取鼠标当前位置的第一个元素;
S12,判断所述第一个元素是否属于所述Canvas元素层;
S13,若所述第一个元素属于所述Canvas元素层,则说明不存在上层DOM元素;若所述第一个元素不属于所述Canvas元素层,则说明存在上层DOM元素。
进一步地,步骤S3包括:
S31,获取鼠标当前位置的全局坐标;
S32,将所述全局坐标转换为相对于所述Canvas元素层的相对坐标。
进一步地,步骤S4包括:
利用isPointInPath方法检测所述相对坐标是否在所述Canvas元素层的子元素的范围内。
进一步地,步骤S4包括:
所述子元素响应鼠标事件时,设置相应的鼠标指针。
进一步地,若存在所述上层DOM元素,将所述Canvas元素层的CSS属性中的pointer-events设置成none,使所述Canvas元素层不响应鼠标事件。
进一步地,若所述鼠标坐标在所述Canvas元素层的子元素的范围内,将所述子元素的CSS属性中的pointer-events设置成auto,使所述子元素响应鼠标事件。
本发明还提供一种计算机可读存储介质,其上存储有可执行指令,所述指令在由处理器执行时,实现如上所述的任一种实现鼠标事件穿透的方法的步骤。
本发明还提供了一种电子设备,其包括:
存储器,用于存储可执行指令;以及
处理器,用于执行所述存储器中存储的可执行指令,实现如上所述的任一种实现鼠标事件穿透的方法的步骤。
本发明还提供了一种计算装置,其包括:
输入设备,用于向所述计算装置输入信息或指令;
输出设备,用于从所述计算装置输出信息;以及
如上所述的电子设备。
与现有技术相比,本发明具有以下优点:本发明提出一种实现鼠标事件穿透的方法,通过结合鼠标位置检测以及CSS属性,并根据Canvas中的实际元素位置来响应事件。同时滑过透明部分时,也不影响下层元素响应鼠标事件。
附图说明
通过下文中参照附图对本发明所作的描述,本发明的其它目的和优点将显而易见,并可帮助对本发明有全面的理解。
图1为本发明实施例提供的实现鼠标事件穿透的方法的实施步骤的流程图;
图2为本发明实施例提供的计算机可读存储介质的结构示意图;
图3为本发明实施例提供的电子设备的结构示意图;
图4为本发明实施例提供的计算装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例的附图,对本发明的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明的一个实施例,而不是全部的实施例。基于所描述的本发明的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另外定义,本发明使用的技术术语或者科学术语应当为本发明所属领域内具有一般技能的人士所理解的通常意义。
根据本发明的一个方面,提供了一种实现鼠标事件穿透的方法,具体实现思路如下:
在存在上层DOM元素的情况下,可以通过设置Canvas元素层的CSS属性,使得Canvas元素层不响应鼠标事件,此时,上层DOM元素响应鼠标事件;在不存在上层DOM元素的情况下,可以通过鼠标坐标在Canvas中的相对位置,对Canvas中的所有元素进行碰撞检测。当有碰撞时,说明此鼠标事件的响应对象应该是Canvas元素中的子元素,此时,可以通过设置子元素的CSS属性,让子元素本身接收鼠标事件,同时设置鼠标手型;如果没有发生碰撞,说明Canvas元素不是此事件的目标,应该穿透Canvas,让下层其他元素得到响应,此时,可以通过设置Canvas的CSS属性,让Canvas本身不接受鼠标事件,同时取消鼠标手型,这样事件就会由下层DOM元素来处理。
更具体的,下面结合附图对本发明实现鼠标事件穿透的方法进行详细的描述。
参考图1所示,本发明的实施例提供的鼠标事件穿透的方法,包括如下步骤:
S1,检测是否存在上层DOM元素;
S2,若存在所述上层DOM元素,则设置Canvas元素层的CSS属性,以使所述Canvas元素层不响应鼠标事件,此时,所述上层DOM元素响应鼠标事件;若不存在所述上层DOM元素,则执行步骤S3;
在具体实施过程中,可以先在全局Window上,添加一个鼠标移动的事件监听器来处理鼠标动作。
例如:window.addEventListener(′mousemove′,onMouseMove)
在监听函数onMouseMove中,第一步,不能影响上层元素的鼠标响应,所以需要判断鼠标事件的目标对象是否是当前Canvas元素,这个可以通过浏览器提供的elementFromPoint全局函数来完成,此函数可以获取任意坐标下的第一个元素对象(当然类似的还有一个elementsFromPoint函数,可以获取坐标下的所有元素对象,不过我们这里只需要取第一个就可以了,因此为了性能考虑,使用elementFromPoint函数来完成),为了能够使得Canvas能够被elementFromPoint检测到,在elementFromPoint检测之前,临时将Canvas的pointer-events设置为auto。这样,我们就得到了当前位置下的第一个元素,如果不是当前Canvas元素,说明上层有其他元素需要响应,那么当前Canvas应设置为不响应鼠标事件的状态,即将Canvas元素层的CSS属性中的pointer-events设置为none,此时,上层DOM元素响应鼠标事件;如果第一个元素就是当前Canvas元素,说明上层没有其他元素,需要继续进行下面的步骤。
S3,检测鼠标坐标的位置;
在本实施例中,步骤S3可以进一步包括,
S31,获取鼠标当前位置的全局坐标;
S32,将所述全局坐标转换为相对于所述Canvas元素层的相对坐标。
S4,若所述鼠标坐标在所述Canvas元素层的子元素的范围内,则设置所述子元素的CSS属性,使所述子元素响应鼠标事件;若所述鼠标坐标的位置不在所述Canvas元素层的子元素范围内,则设置所述Canvas元素层的CSS属性,使所述Canvas元素层不响应鼠标事件,此时,下层DOM元素响应鼠标事件。
在具体实施过程中,当所述鼠标坐标在所述Canvas元素层的子元素的范围内时,可以将所述子元素的CSS属性中的pointer-events设置成auto,使所述子元素响应鼠标事件。
在本实施例中,可以利用isPointInPath方法检测所述相对坐标是否在所述Canvas元素层的子元素的范围内。
在本实施例中,步骤S4可以进一步包括:所述子元素响应鼠标事件时,设置相应的鼠标指针。
本实施例提出的实现鼠标事件穿透的方法,可以通过结合鼠标位置检测以及CSS属性,并根据Canvas中的实际元素位置来响应事件。同时滑过透明部分时,也不影响下层元素响应鼠标事件。
基于同一发明构思,参考图2所示,本发明的实施例还提供一种计算机可读存储介质201,其上存储有可执行指令202,所述可执行指令202在由一个或多个处理器执行时,可以实现如上实施例所述的任一种实现鼠标事件穿透的方法的步骤。
基于同一发明构思,参考图3所示,本发明实施例还提供了一种电子设备301,该电子设备301可以包括:
存储器310,其用于存储可执行指令311;以及
处理器320,其用于执行存储器310中存储的可执行指令311,以实现如上实施例所述的任一种实现鼠标事件穿透的方法的步骤。
参考图4所示,本发明还提供了一种计算装置401,该计算装置401包括用于向计算装置401输入信息或指令的输入设备402、用于从计算装置401输出信息的输出设备403以及如上所述的电子设备301。
对于本发明的实施例,还需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合以得到新的实施例。
最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。
Claims (10)
1.一种实现鼠标事件穿透的方法,其特征在于,包括如下步骤:
S1,检测是否存在上层DOM元素;
S2,若存在所述上层DOM元素,则设置Canvas元素层的CSS属性,以使所述Canvas元素层不响应鼠标事件,此时,所述上层DOM元素响应鼠标事件;若不存在所述上层DOM元素,则执行步骤S3;
S3,检测鼠标坐标的位置;
S4,若所述鼠标坐标在所述Canvas元素层的子元素的范围内,则设置所述子元素的CSS属性,使所述子元素响应鼠标事件;若所述鼠标坐标的位置不在所述Canvas元素层的子元素范围内,则设置所述Canvas元素层的CSS属性,使所述Canvas元素层不响应鼠标事件,此时,下层DOM元素响应鼠标事件。
2.如权利要求1所述的方法,其特征在于,步骤S1进一步包括:
S11,利用elementFormPoint全局函数获取鼠标当前位置的第一个元素;
S12,判断所述第一个元素是否属于所述Canvas元素层;
S13,若所述第一个元素属于所述Canvas元素层,则说明不存在上层DOM元素;若所述第一个元素不属于所述Canvas元素层,则说明存在上层DOM元素。
3.如权利要求1所述的方法,其特征在于,步骤S3进一步包括:
S31,获取鼠标当前位置的全局坐标;
S32,将所述全局坐标转换为相对于所述Canvas元素层的相对坐标。
4.如权利要求3所述的方法,其特征在于,步骤S4进一步包括:
利用isPointInPath方法检测所述相对坐标是否在所述Canvas元素层的子元素的范围内。
5.如权利要求1所述的方法,其特征在于,步骤S4进一步包括:
所述子元素响应鼠标事件时,设置相应的鼠标指针。
6.如权利要求1所述的方法,其特征在于,若存在所述上层DOM元素,将所述Canvas元素层的CSS属性中的pointer-events设置成none,使所述Canvas元素层不响应鼠标事件。
7.如权利要求1所述的方法,其特征在于,若所述鼠标坐标在所述Canvas元素层的子元素的范围内,将所述子元素的CSS属性中的pointer-events设置成auto,使所述子元素响应鼠标事件。
8.一种计算机可读存储介质,其上存储有可执行指令,所述指令在由处理器执行时,实现如权利要求1-7中任一项所述的方法的步骤。
9.一种电子设备,包括:
存储器,用于存储可执行指令;以及
处理器,用于执行所述存储器中存储的可执行指令,以实现如权利要求1-7中任一项所述的方法的步骤。
10.一种计算装置,包括:
输入设备,用于向所述计算装置输入信息或指令;
输出设备,用于从所述计算装置输出信息;以及
如权利要求9所述的电子设备。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810114758.6A CN108304242A (zh) | 2018-02-05 | 2018-02-05 | 实现鼠标事件穿透的方法、相关存储介质、设备和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810114758.6A CN108304242A (zh) | 2018-02-05 | 2018-02-05 | 实现鼠标事件穿透的方法、相关存储介质、设备和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108304242A true CN108304242A (zh) | 2018-07-20 |
Family
ID=62864459
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810114758.6A Pending CN108304242A (zh) | 2018-02-05 | 2018-02-05 | 实现鼠标事件穿透的方法、相关存储介质、设备和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108304242A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109976849A (zh) * | 2019-03-12 | 2019-07-05 | 深圳点猫科技有限公司 | 基于编程语言将web组件悬浮于桌面的方法和电子设备 |
CN110262749A (zh) * | 2019-06-27 | 2019-09-20 | 北京思维造物信息科技股份有限公司 | 一种网页操作方法、装置、容器、设备及介质 |
CN111179439A (zh) * | 2019-12-24 | 2020-05-19 | 武汉理工光科股份有限公司 | 基于three.js的网页端三维空间内部物体交互操作方法 |
CN111290681A (zh) * | 2018-12-06 | 2020-06-16 | 福建省天奕网络科技有限公司 | 一种解决屏幕穿透事件的方法及终端 |
CN112799568A (zh) * | 2019-11-13 | 2021-05-14 | 福建天泉教育科技有限公司 | 一种放映态下控制ppt中元素的方法及终端 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130268872A1 (en) * | 2008-09-02 | 2013-10-10 | Sitscape, Inc. | Situational web-based dashboard |
US20140047413A1 (en) * | 2012-08-09 | 2014-02-13 | Modit, Inc. | Developing, Modifying, and Using Applications |
CN104102367A (zh) * | 2013-04-09 | 2014-10-15 | 阿里巴巴集团控股有限公司 | 一种信息处理方法及装置 |
CN104820558A (zh) * | 2015-05-11 | 2015-08-05 | 北京白鹭时代信息技术有限公司 | 一种拾取被遮挡图像的方法及装置 |
CN106610833A (zh) * | 2015-10-27 | 2017-05-03 | 北京国双科技有限公司 | 一种触发重叠html元素鼠标事件的方法及装置 |
CN107172474A (zh) * | 2017-03-31 | 2017-09-15 | 武汉斗鱼网络科技有限公司 | 一种利用画布绘制弹幕的方法及装置 |
CN107423050A (zh) * | 2017-04-28 | 2017-12-01 | 广州酷狗计算机科技有限公司 | 一种穿透操作的方法和装置 |
-
2018
- 2018-02-05 CN CN201810114758.6A patent/CN108304242A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130268872A1 (en) * | 2008-09-02 | 2013-10-10 | Sitscape, Inc. | Situational web-based dashboard |
US20140047413A1 (en) * | 2012-08-09 | 2014-02-13 | Modit, Inc. | Developing, Modifying, and Using Applications |
CN104102367A (zh) * | 2013-04-09 | 2014-10-15 | 阿里巴巴集团控股有限公司 | 一种信息处理方法及装置 |
CN104820558A (zh) * | 2015-05-11 | 2015-08-05 | 北京白鹭时代信息技术有限公司 | 一种拾取被遮挡图像的方法及装置 |
CN106610833A (zh) * | 2015-10-27 | 2017-05-03 | 北京国双科技有限公司 | 一种触发重叠html元素鼠标事件的方法及装置 |
CN107172474A (zh) * | 2017-03-31 | 2017-09-15 | 武汉斗鱼网络科技有限公司 | 一种利用画布绘制弹幕的方法及装置 |
CN107423050A (zh) * | 2017-04-28 | 2017-12-01 | 广州酷狗计算机科技有限公司 | 一种穿透操作的方法和装置 |
Non-Patent Citations (3)
Title |
---|
LINELINESOEASY: "点击按钮事件穿透", 《HTTPS://BLOG.CSDN.NET/LINELINESOEASY/ARTICLE/DETAILS/76762657》 * |
RIN阳: "CSS3 超实用属性:pointer-events", 《HTTPS://WWW.JIANSHU.COM/P/3EBA945FC19E》 * |
码迷: "canvas 使用 isPointInPath() 判断鼠标位置是否在绘制的元素上", 《HTTP://WWW.MAMICODE.COM/INFO-DETAIL-1799479.HTML》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111290681A (zh) * | 2018-12-06 | 2020-06-16 | 福建省天奕网络科技有限公司 | 一种解决屏幕穿透事件的方法及终端 |
CN111290681B (zh) * | 2018-12-06 | 2021-06-08 | 福建省天奕网络科技有限公司 | 一种解决屏幕穿透事件的方法及终端 |
CN109976849A (zh) * | 2019-03-12 | 2019-07-05 | 深圳点猫科技有限公司 | 基于编程语言将web组件悬浮于桌面的方法和电子设备 |
CN109976849B (zh) * | 2019-03-12 | 2022-08-23 | 深圳点猫科技有限公司 | 基于编程语言将web组件悬浮于桌面的方法和电子设备 |
CN110262749A (zh) * | 2019-06-27 | 2019-09-20 | 北京思维造物信息科技股份有限公司 | 一种网页操作方法、装置、容器、设备及介质 |
CN110262749B (zh) * | 2019-06-27 | 2021-05-28 | 北京思维造物信息科技股份有限公司 | 一种网页操作方法、装置、容器、设备及介质 |
CN112799568A (zh) * | 2019-11-13 | 2021-05-14 | 福建天泉教育科技有限公司 | 一种放映态下控制ppt中元素的方法及终端 |
CN111179439A (zh) * | 2019-12-24 | 2020-05-19 | 武汉理工光科股份有限公司 | 基于three.js的网页端三维空间内部物体交互操作方法 |
CN111179439B (zh) * | 2019-12-24 | 2023-05-09 | 武汉理工光科股份有限公司 | 基于three.js的网页端三维空间内部物体交互操作方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108304242A (zh) | 实现鼠标事件穿透的方法、相关存储介质、设备和装置 | |
CN104102643B (zh) | 一种进行页面快照的方法和装置 | |
US11726802B2 (en) | Robust user interface related robotic process automation | |
JP2013539112A5 (zh) | ||
US20130275418A1 (en) | Method and system for updating a background picture of a web search results page for different search queries | |
CN107506162B (zh) | 坐标映射方法、计算机可读存储介质和投影仪 | |
CN109086729B (zh) | 通信行为检测方法、装置、设备及存储介质 | |
WO2018137399A1 (zh) | 一种用于取消待执行操作的方法与装置 | |
CN108491145B (zh) | 书写应用的撤销笔迹方法及装置、存储介质、终端设备 | |
CN113537374B (zh) | 一种对抗样本生成方法 | |
CN106131630A (zh) | 基于电视机的网页浏览控制方法及相关装置 | |
CN114595343B (zh) | 图谱展示方法、装置、存储介质及电子设备 | |
KR102125212B1 (ko) | 전자 필기 운용 방법 및 이를 지원하는 전자 장치 | |
CN109766196A (zh) | 一种任务调度方法、装置及设备 | |
CN112037332B (zh) | 浏览器的显示校验方法、装置、计算机设备和存储介质 | |
US20220091735A1 (en) | Recognition and processing of gestures in a graphical user interface using machine learning | |
US20130318524A1 (en) | Virtualizing integrated calls to provide access to resources in a virtual namespace | |
CN105159528A (zh) | 一种图片内容显示方法及移动终端 | |
CN111325812B (zh) | 军标符号标绘中钳击箭标的动态计算及绘制方法及装置 | |
JP2023503532A (ja) | ユーザーインターフェース自動化における自動アンカー決定およびターゲットグラフィカル要素識別 | |
CN112363919A (zh) | 用户界面ai自动化测试方法、装置、设备和存储介质 | |
KR102370519B1 (ko) | 데이터 전송 방법 및 디바이스 | |
CN104751057B (zh) | 一种用于增强计算机系统安全性的方法及装置 | |
KR102154821B1 (ko) | 필기 인식을 이용한 전자 장치의 제어 방법 및 그 전자 장치 | |
US10162602B2 (en) | Method for handling user-level events for programming an application |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180720 |
|
RJ01 | Rejection of invention patent application after publication |