LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

鼠标事件mouseup与iframe

freeflydom
2024年6月29日 11:4 本文热度 1009

iframe是一个独立的文档树,是一个沙箱,鼠标事件终止于iframe文档根部,无法冒泡到外层。

复现

最近写dooringx-lib时遇到了个巨大难题。

我试着在编辑器的画布中使用iframe,然后iframe中做一个可以拖拽选择的效果,这时这个坑就出现了。

也就是我在iframe中按住鼠标左键,然后移出iframe后松开鼠标左键,此时,父页面无法监听到mouseup事件。

于是我还整了很多骚操作,一开始我觉得可能是preventdefault搞得鬼,把所有preventdefault都删了。发现不行。

然后在iframe里用postmessage告诉父页面左键点击,让父页面dispatch一个假的mousedown事件,发现还是不行。(没法传递真的mouseEvent事件,因为会报错:Failed to execute ‘postMessage’ on ‘Window’: MouseEvent object could not be cloned)

解决方案

在我研究半天后,找到以下2个方案:

1、创建iframe时就给个遮罩,相当于所有操作都在遮罩上完成。缺点就是iframe里自己本来有很多的事件就无法触发!所以如果这么操作,那么就要把事件都改到遮罩上,然后给iframe里面进行通信。

2、使用mousemove事件。我发现虽然没有触发mouseup但是能触发mousemove,既然可以监听到iframe里的点击,那么再加上mousemove,在限定条件下就可以完成想要的效果。

如果时间紧迫还是用第二种方式,如果时间充足就使用第一种方式,毕竟除了up外,还可能有别的iframe坑需要填。



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/yehuozhili/article/details/118914339



该文章在 2024/6/29 11:04:49 编辑过
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved