关于vant组件ActionSheet事件穿透的问题以及解决方案

关于vant的一些组件我真的不想吐槽了,例如动作面板actionSheet这个组件,在弹出层点击之后居然都是事件穿透…,我这里贴一个例子吧,这是我在公司负责的一个h5项目,点击评价时会显示动作面板,如下:(这是一个工单列表,点击红色框框内除了按钮位置都会跳转到工单详情页)

关于vant组件ActionSheet事件穿透的问题以及解决方案_第1张图片
此时我点击评价,弹出actionSheet动作面板
关于vant组件ActionSheet事件穿透的问题以及解决方案_第2张图片
如果此时有需求是点击遮罩层隐藏动作面板,那么问题就来了,如果遮罩层后有点击事件,那么会发生事件穿透,在这个例子即是我点击遮罩层就直接进入到工单详情页了,这显然不合理。(更坑的是…点击下面的取消按钮也同样会发生事件穿透,我哭了)

在这,有两个解决方法,建议采取第一个方法,比较简单

(1)还好这个actionSheet组件有一个监听点击遮罩层的事件
关于vant组件ActionSheet事件穿透的问题以及解决方案_第3张图片
在data中创建一个变量来保存是否点击了遮罩层,当点击遮罩层时就把这个变量置为true, 添加定时器,短暂时间后变为false,因为你后续还是要进入详情页的,不能一直禁着
关于vant组件ActionSheet事件穿透的问题以及解决方案_第4张图片
再结合进入工单详情页前的判断就可以解决事件穿透的问题啦,如果是点击遮罩层过来的,那就不跳转。代码如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200628232010690.png关于vant组件ActionSheet事件穿透的问题以及解决方案_第5张图片

(2)通过事件捕获的形式来阻止事件穿透,思路如下:当点击遮罩层时,会逐层去捕获绑定的点击事件,此时你只需要在被事件穿透后点击到的元素的父元素上把该点击事件捕获并拦截,也能成功阻止该组件的事件穿透。具体请自行查阅相关文档。

补充:至于那个点击取消按钮也会事件穿透的bug,我的解决方法是为动作面板添加点击事件,并阻止其事件冒泡和默认事件。
关于vant组件ActionSheet事件穿透的问题以及解决方案_第6张图片
关于vant组件ActionSheet事件穿透的问题以及解决方案_第7张图片

你可能感兴趣的:(关于vant组件ActionSheet事件穿透的问题以及解决方案)