Vant Popover 事件点击两次才能触发

开发的时候需要做一个弹窗形的二级导航,所以选择了Vant的Popover组件,最后在调试的时候发现绑定的@select="onSelect"需要点击两次才能触发。

image

这是因为移动设备上的浏览器默认会在用户点击屏幕大约延迟300毫秒后才会触发点击事件,这是为了检查用户是否在做双击。

解决方法

先执行安装fastclick的命令

npm install fastclick -S

之后在全局或者当前需要的页面使用fastclick

import FastClick from 'fastclick'
FastClick.attach(document.body)

完整代码

import FastClick from 'fastclick' 

methods:{
  titleItem(){
    setTimeout(() => {
        // 获取 Popover 弹窗的列表
        let popItem = document.querySelectorAll('.van-popover__action')
        for(let i=0;i<popItem.length;i++){
          FastClick.attach(popItem[i]) // 通过 FastClick 进行绑定
        }
    },300)
  }
}

参考文章

Vue.js - 移动端Click事件300毫秒延迟解决方案(fastClick.js)

更新

在使用fastclick之后vant轮播时触发了 click 事件,fastclick的原理是通过 Touch 事件模拟出 click 事件,而 Swipe 内部默认会阻止 touchmove 事件冒泡,干扰了 fastclick 的判断,导致出现这个问题。

将 Swipe 组件的 stop-propagation 属性设置为 false 即可避免该问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容