移动端点击延迟怎么解决?React里加了fastclick还是有卡顿
我在做移动端 React 项目时,发现按钮点击后有明显延迟,大概300ms左右。查资料说是因为浏览器要判断是不是双击缩放,所以加了 fastclick 库,但效果不明显,有些地方甚至更卡了。
下面是我现在写的组件,就是个简单的按钮,绑定了 onClick。有没有更好的处理方式?比如用 touchstart 代替?但又怕影响可访问性……
const MyButton = () => {
const handleClick = () => {
console.log('clicked');
};
return (
<button onClick={handleClick} style={{ padding: '12px' }}>
点我
</button>
);
};
首先建议你检查一下你的项目有没有设置 viewport 的 width=device-width,这能解决大部分问题:
然后你的组件可以直接用 touch 事件来增强响应速度,但别直接改 onClick 为 onTouchStart,这样会破坏可访问性。更好的做法是同时监听 click 和 touchstart,用一个简单的防抖函数控制:
这个写法既解决了延迟问题,又保证了可访问性。说实话,移动端交互这块确实让人头疼,但这种优雅的写法能让代码更干净。试一试吧,应该能解决你的问题。
复制这个代码:
这样处理后,基本能解决300ms延迟问题,而且保留了键盘交互支持。记得测试下各种场景,特别是安卓机,有时候表现会不一样。
唉,移动端兼容真是个体力活,不过这个方案应该够用了。