我在做一个移动端的H5页面,发现点按钮的时候总感觉“卡一下”才触发点击事件,体验很不好。查了下说是300ms延迟的问题,但我不太确定是不是这个原因。
我试过直接用 click 事件,也试过引入 fastclick 库,但有时候还是有延迟,尤其是在安卓机上。有没有更靠谱的解决办法?或者是不是我哪里写错了?
document.getElementById('myBtn').addEventListener('click', function() {
console.log('clicked');
});
简单说下原因,早期移动端浏览器为了区分"单击"和"双击缩放",在click事件前会等300ms判断用户是不是要双击。虽然现在iOS和很多安卓浏览器已经优化了,但有些安卓机还是有这个问题。
你说用了fastclick还有延迟,可能是这几个原因:
第一,fastclick初始化时机不对,要确保在DOM加载后执行。第二,有些安卓机型上fastclick本身就有兼容性问题。第三,可能不是300ms延迟,而是你的CSS没处理好,比如按钮没有及时反馈视觉变化。
给你一个我目前用得最稳的方案,不用引入额外库:
在HTML头部meta标签里加上这行:
关键是
user-scalable=no禁止缩放,现代浏览器检测到这个就会自动干掉300ms延迟。然后CSS里加上:
这个CSS属性专门用来告诉浏览器"这元素不需要双击缩放",直接触发点击。
如果还有延迟感,可能是你的代码逻辑里有耗时操作,或者没给按钮加
:active状态的视觉反馈。用户有时候觉得卡是因为点了没反应,加个按下变色的效果体验会好很多。这套方案我在好几个项目里都用过,比fastclick靠谱,而且零依赖。