iOS 13 下网页点击事件又出现了类似 300ms 的延迟,有大佬知道是什么原因吗?

2019-09-24 11:15:44 +08:00
 anjianshi

无论是 touchstart 还是 click 都会有延迟;并且快速点击 10 次,大约只会生效 5 ~ 6 次。
iOS 12 下就不会。 会不会和新加的触感触控有关?

<!doctype html>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover" />

<div id="app">
  <div class="count-wrap">
    <div>当前数量:<span id="num"></span></div>
    <div id="btn">更新数量</div>
  </div>
</div>

<script>
  var i = 0
  function setNum() {
    document.getElementById('num').innerHTML = i
  }
  setNum()
  document.getElementById('btn').onclick = function() {
    i += 1
    setNum()
  }
</script>  

<style>
* {
  margin: 0;
  padding: 0;
}
#app {
  padding: 20px;
}
.count-wrap {
  margin-top: 40px;
}
#btn {
  width: 6em;
  padding: 0.3em;
  border: 1px solid #ccc;
  border-radius: 2px;
  text-align: center;
  margin-top: 1em;
  background-color: #f0f0f0;
  /* -webkit-tap-highlight-color: transparent; */
  user-select: none;
}
#btn:active {
  background-color: #fafafa;
}
</style>
3017 次点击
所在节点    问与答
14 条回复
anjianshi
2019-09-24 11:47:38 +08:00
zacharyjia
2019-09-24 12:16:41 +08:00
好像确实有类似的情况,我的感觉是有时候点链接一次没效果,得点第二次才能开始打开新网页
oIMOo
2019-09-24 15:16:07 +08:00
慢速点击(两次间隔较长)没有问题。
然而快速点击就会复现。
redbuck
2019-09-24 16:11:57 +08:00
加 touch-action: manipulation; 试试
anjianshi
2019-09-24 16:43:04 +08:00
@redbuck 加了没有效果

```css
#btn { touch-action: manipulation; }
```
redbuck
2019-09-24 17:07:13 +08:00
看了下你的 demo,这个测试不太合理啊.

试试这个.
我测试是不存在 300ms 延迟的.

点击齿轮可以打开控制台

```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/eruda/1.5.8/eruda.min.js"></script>
<title>Title</title>
</head>
<body>
<button id="btn">点击</button>

<script type="text/javascript">
eruda.init();
const btn = document.getElementById('btn');

btn.addEventListener('touchstart', function () {
console.time('click');
});

btn.addEventListener('click', function () {
console.timeEnd('click');
});
</script>
</body>
</html>

```
anjianshi
2019-09-24 17:18:02 +08:00
@redbuck touchstart 本身都被延迟触发了的。这个和以前的 300ms 情况不太一样。
我的那个演示页面,ios12 下,连续点击 10 下计数就是 10,ios13 下就是 5
anjianshi
2019-09-24 17:22:17 +08:00
http://anjianshi.net/touch3.html
这个版本改成监听 touchstart 了
redbuck
2019-09-24 17:28:34 +08:00
@anjianshi 300 毫秒延迟一般就是指 click 比 touchstart 晚 300ms.

不过你说的问题也是存在.感觉事件被节流了,点再快都按固定频率输出
chairuosen
2019-09-24 17:29:02 +08:00
实验了,是真的
redbuck
2019-09-24 17:29:52 +08:00
@anjianshi 不是 300ms 延迟应该不会影响正常页面,对网页游戏之类的可能才有影响
belin520
2019-09-24 17:31:40 +08:00
iOS 13.1 已经修好了
anjianshi
2019-09-24 17:31:57 +08:00
嗯。影响不是很大,不过像数字小键盘之类的组件点起来会有点卡。
anjianshi
2019-09-24 17:32:57 +08:00
@belin520 哦哦哦,那明天升级试试看!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/603638

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX