因为小程序端的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 个评论
要回复文章请先登录或注册