当前位置: 首页 > news >正文

vue-draggable浏览器拖拽event事件对象拖动时 DragEvent path undefined

场景:

在做组件拖拽过程中,需要获取到触发元素冒泡过程中的所有元素,所以使用了event.path属性。在Chrome下正常运行,但是在FireFox下测试时发现,完犊子,失效了,通过问题排查,发现了Chrome下打印的event事件对象和FireFox下打印的事件对象不一样,在火狐浏览器下没有event.path属性。

描述:

!原始chrome的event事件对象存在path属性
!在chrome浏览器版本升级 109.0.5414.120后,event也没有path属性了
!firefox的event事件对象是一直没有path属性的

解决方案:

方案一:

百度寻找答案,发现很多人都给出如下的方案:

e.path || (e.composedPath && e.composedPath())

e.path是Chrome单独支持的属性,不属于MDN的标准,所以在MDN上搜不到event.path,但是composedPath是标准的属性。在MDN上解释如下:
在这里插入图片描述
点击查看MDN关于composedPath的介绍

高兴的将上述代码拿到项目中尝试发现,WTF?怎么是空数组?(难道是自定义事件的锅吗?在Vue中不行)

方案二:

在分析FireFox的event对象时发现,event.target对象中的parentNode就是上层的父元素DOM节点。
在这里插入图片描述
于是准备自己将所有的冒泡元素收集起来,以下composedPath方法就是具体的实现过程:

composedPath (e) {// 存在则直接returnif (e.path) { return e.path }// 不存在则遍历target节点const target = e.targete.path = []while (target.parentNode !== null) {e.path.push(target)target = target.parentNode}// 最后补上document和windowe.path.push(document, window)return e.path
}

然后在项目中使用这个方法做一个兼容即可。(记录一下,真坑!!!!)

综上,方案一不可行,可能是vue-draggable组件库自定义事件对象的锅,原生js可能有效,需要进一步验证。方案二可行。

http://www.lryc.cn/news/20578.html

相关文章:

  • 【云原生】搭建k8s高可用集群—20230225
  • LeetCode121_121. 买卖股票的最佳时机
  • 收割不易,五面Alibaba终拿Java岗offer
  • 【离线数仓-4-数据仓库设计-分层规划构建流程】
  • SQL零基础入门学习(十一)
  • 排序基础之插入排序
  • LabVIEW控制DO通道输出一个精确定时的数字波形
  • openpnp - 零碎记录
  • Qt编写微信支付宝支付
  • LeetCode 剑指 Offer 64. 求1+2+…+n
  • Mapper代理开发
  • 为什么在连接mysql时,设置 SetConnMaxIdleTime 没有作用
  • 嵌入式开发利器
  • Qt 的QString类的使用
  • django项目部署(腾讯云服务器centos)
  • 计算机网络笔记、面试八股(一)——TCP/IP网络模型
  • 51单片机入门 - 简短的位运算实现扫描矩阵键盘
  • Mr. Cappuccino的第45杯咖啡——Kubernetes之部署SpringBoot项目
  • vscode在远程服务器提交git的时候无需每次都要输入账号密码的配置
  • 【Spring 基础】
  • 2023年全国最新机动车签字授权人精选真题及答案5
  • 5138: 数字游戏
  • 阅读笔记9——DenseNet
  • PowerAutomation获取邮件附件并删除这个邮件方法
  • websocket报错集锦-不断更新中
  • Spring Cloud Nacos源码讲解(七)- Nacos客户端服务订阅机制的核心流程
  • 【华为OD机试模拟题】用 C++ 实现 - 对称美学(2023.Q1)
  • Go语言内存管理详解-学习笔记
  • Geospatial Data Science (4): Spatial weights
  • JUC-Synchronized相关内容