1***@qq.com
1***@qq.com
  • 发布:2023-02-22 16:35
  • 更新:2023-02-22 16:35
  • 阅读:366

stopPropagation的替代方案

分类:uni-app

因为小程序端的click事件不能通过stopPropagation在监听事件里动态阻止事件冒泡,最多只能通过@click.stop去在catch阶段处理事件。在需要根据情况动态决定是否阻止事件冒泡时,只能通过v-if去生成两个不同的组件,一个@click另一个@click.stop,这样显然会加重资源消耗。

由此我实现了一个stopPropagation的替代方案,去动态的阻止冒泡。核心的原理是pointer-events这个css样式,这个样式可以用来控制元素是否可以响应事件。给需要stopPropagation的区域通过@click.stop去绑定事件,默认情况下会一直阻止事件冒泡。在需要事件冒泡的时候,就通过动态样式控制,把区域的pointer-events设为none,就隔绝了@click.stop的捕获处理。这样这个事件就可以向外冒泡了。

这个方案有一种情况是不适用的,就是stopPropagation区域内部有子元素需要绑定事件。因为即使给子元素的pointer-events设置成auto,事件仍会受@click.stop的影响,只能触发到区域这一层不能向外冒泡。

0 关注 分享

要回复文章请先登录注册