移动端点击为什么有300ms延迟?怎么解决? Top丶梓熙 提问于 2026-03-26 12:22:19 阅读 28 移动 我在做移动端页面时发现,用 click 事件绑定按钮,点完要等一下才有反应,明显卡顿。查了下说是300ms延迟的问题,但我不太明白这延迟是哪来的? 试过直接用 touchstart 代替 click,虽然快了,但又触发了多次,而且和原生滚动冲突。有没有靠谱的解决办法?比如用 fastclick 这种库是不是还适用?现在主流方案是啥? 300ms延迟触摸事件 我来解答 赞 3 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 红辰 Lv1 这300ms延迟是因为早期移动浏览器要判断是不是双击操作。现在确实有更好的写法来解决。 fastclick库虽然可以解决问题,但现在有点过时了。现代方案是用 touch-action CSS属性,配合 pointer-events 一起用更优雅。 简单来说,在需要优化的元素上加上 .button { touch-action: manipulation; } 这样能消除点击延迟,还不影响原生滚动。如果需要兼容性更好的写法,可以用这个小函数: function fastTap(el) { let startX, startY; el.addEventListener('touchstart', e => { startX = e.touches[0].clientX; startY = e.touches[0].clientY; }); el.addEventListener('touchend', e => { const endX = e.changedTouches[0].clientX; const endY = e.changedTouches[0].clientY; if (Math.abs(endX - startX) < 10 && Math.abs(endY - startY) < 10) { el.click(); } }); } 这个写法比直接用touchstart靠谱多了,也不会触发多次。记住加个小小的防抖就行,不然还是可能会有点问题。 回复 点赞 2026-03-26 12:31 加载更多 相关推荐 2 回答 36 浏览 移动端点击为什么有300ms延迟?怎么解决? 我在用 Vue 做一个移动端的按钮,点下去总感觉卡一下才触发,查了下说是 300ms 延迟的问题。试过加 touch-action: manipulation,但好像没用,求问怎么彻底解决? 这是我的... 薪羽🍀 移动 2026-02-25 20:11:21 2 回答 44 浏览 移动端点击事件300ms延迟怎么彻底解决? 最近在做移动端适配时发现,页面按钮的点击事件有明显延迟,测试工具显示每次点击都有300ms左右的延迟。我尝试过引入FastClick库,但页面加载时控制台报错Cannot read propertie... Zz含平 优化 2026-02-11 13:01:25 2 回答 27 浏览 React中使用FastClick为什么还是有300ms延迟? 我在React项目移动端按钮点击时还是有明显的300ms延迟,明明已经引入了FastClick。按照文档在componentDidMount里初始化了,但点击按钮还是有延迟,甚至有时候会触发两次事件.... 慕容海宇 移动 2026-02-16 19:18:25 2 回答 30 浏览 移动端点击延迟怎么解决?React里加了fastclick还是有卡顿 我在做移动端 React 项目时,发现按钮点击后有明显延迟,大概300ms左右。查资料说是因为浏览器要判断是不是双击缩放,所以加了 fastclick 库,但效果不明显,有些地方甚至更卡了。 下面是我... 昊沅(打工版) 优化 2026-03-30 11:47:17 2 回答 54 浏览 移动端 touch 事件延迟怎么解决? 我在做移动端页面时,发现点击按钮有明显延迟,大概300ms左右,用户体验很差。查了下说是浏览器默认的双击缩放导致的。 试过加 user-scalable=no 到 viewport,但 Safari ... UP主~艳敏 优化 2026-03-06 14:55:22 2 回答 42 浏览 移动端点击按钮为什么会有延迟反馈? 我在做一个移动端的H5页面,发现点按钮的时候总感觉“卡一下”才触发点击事件,体验很不好。查了下说是300ms延迟的问题,但我不太确定是不是这个原因。 我试过直接用 click 事件,也试过引入 fas... 西门俊锡 移动 2026-03-01 18:17:23 2 回答 43 浏览 移动端 touch 事件延迟怎么解决? 我在做移动端的按钮点击功能,发现用 click 事件会有明显延迟,大概300ms左右,用户体验很差。听说要用 touch 事件来优化,但我试了 touchstart 又会触发多次,还和滚动冲突。 有没... A. 伊芃 移动 2026-02-28 22:08:22 1 回答 24 浏览 FastClick 在 Vue 里为啥没消除点击延迟? 我在移动端用 FastClick 想解决 300ms 点击延迟,但加了之后好像没效果,按钮还是有明显延迟。我是在 main.js 里引入并 attach 到 body 上的,难道是和 Vue 的事件系... 西门栾同 移动 2026-03-13 14:38:18 2 回答 49 浏览 React按钮点击响应慢,FID分数总是在100ms以上怎么办? 我在开发一个React应用时遇到了FID(最大内容绘制)分数总是卡在100ms以上的问题。用户点击按钮后延迟特别明显,尤其是在移动端。我尝试给处理函数加了async,还用了setTimeout延迟非关... 春依 ☘︎ 前端 2026-02-12 12:19:28 2 回答 164 浏览 移动端触摸事件有300ms延迟怎么解决? 我正在给移动端网页加点击反馈,发现用ontouchend事件触发按钮高亮时,总要等半秒才生效。试过设置-webkit-tap-highlight-color透明也没用,代码如下: element.on... 瑞红 ☘︎ 移动 2026-02-02 13:36:32
fastclick库虽然可以解决问题,但现在有点过时了。现代方案是用
touch-actionCSS属性,配合pointer-events一起用更优雅。简单来说,在需要优化的元素上加上
这样能消除点击延迟,还不影响原生滚动。如果需要兼容性更好的写法,可以用这个小函数:
这个写法比直接用touchstart靠谱多了,也不会触发多次。记住加个小小的防抖就行,不然还是可能会有点问题。