我在用 Vue 做一个移动端的按钮,点下去总感觉卡一下才触发,查了下说是 300ms 延迟的问题。试过加 touch-action: manipulation,但好像没用,求问怎么彻底解决?
这是我的代码:
<template>
<button @click="handleClick">点我</button>
</template>
<script>
export default {
methods: {
handleClick() {
console.log('clicked!');
}
}
}
</script>
你先确认下
里有没有这一行:注意
user-scalable=no这个很关键——如果没加,或者写了user-scalable=yes,某些老设备上还会触发 300ms 延迟。如果加了还是卡,大概率是旧设备或某些 WebView 容器(比如老版微信内置浏览器)的问题。这时候性能上最干净的方案是用
touchstart替代click,因为touchstart是毫秒级触发的,没有延迟:或者用
touchend+ 手动判断是否是有效点击(防止滑动误触):不过更推荐用
fastclick库(虽然有点老但稳定),或者直接升级项目依赖,Vue 3 + Vite 默认生成的index.html里已经自动加了合适的 viewport,基本不会踩坑。最后提醒:
touch-action: manipulation只是告诉浏览器「别等双击缩放了」,但某些老 WebView 里它根本不认,所以别光指望它。