Javascript 为什么安卓点击区域的半径比touchstart大?我怎样才能使它保持一致?

Javascript 为什么安卓点击区域的半径比touchstart大?我怎样才能使它保持一致?,javascript,android,click,touchstart,Javascript,Android,Click,Touchstart,我有一个简单的矩形锚标签。我使用jQuery对单击和touchstart事件做出以下响应: $(document).ready(function() { $("#button").on("click touchstart", function(e) { $("#log").append(e.type + "<br/>"); }); }); 单击矩形锚定的边缘时,仅触发单击事件。当您点击该区域的中心时,单击和触摸启动都会启动 为什

我有一个简单的矩形锚标签。我使用jQuery对
单击
touchstart
事件做出以下响应:

  $(document).ready(function() {
      $("#button").on("click touchstart", function(e) {
          $("#log").append(e.type + "<br/>");
      });
  });

单击矩形锚定的边缘时,仅触发
单击
事件。当您点击该区域的中心时,
单击
触摸启动
都会启动

为什么只有
点击
才会触发胖手指检测?有没有办法让touchstart事件也能在胖手指上运行


问题动画 只在边缘点击时触发点击

预期行为,两个事件

问题 触摸设备上的
点击
事件旨在模拟基于点击的点击。这里有一个大问题,因为触摸界面与桌面界面有很大的不同。最大的区别是什么?鼠标点击比手指触摸精确得多。为了确保桌面站点和应用程序至少在某种程度上有用,我们设计了您正在观察的行为。这样,手机用户仍然能够点击一个小链接,即使他的手指实际上太不精确,无法准确点击链接

解决方案 您不会喜欢这种情况,但解决方案就是不要在触摸屏设备上使用
单击事件。这通常不会执行,因为
点击
事件实际上是在
触摸结束
事件大约300毫秒后触发的,因此无论哪种方式都感觉迟钝(等待双击的延迟),现在您有了另一个不使用它的原因

难点
同时具有触摸屏和鼠标的设备。你可以选择是否要为这些烦恼。就我个人而言,我倾向于在移动设备上使用
touch
事件时,模仿点击并忍受额外的延迟,但如果你花时间,你可能可以创建更精心设计的解决方案。

我正试图让桌面站点成为一个触摸友好的临时解决方案。客户不想做一个完全响应的站点或移动站点,他们只想让桌面站点处理悬停/触摸事件。iOS有一种将第一次点击视为悬停的方式,它扩展了旧的下拉导航。我正在尝试在Android上重新创建这个。我基本上是让它工作的,但是如果你错过了导航元素,这个接触半径问题会导致它的行为不一致。不幸的是,我需要依靠
点击这里。由于这是一个临时解决方案,我可能不得不说“no solution”@tmsimont作为一个临时解决方案,您可以根据useragent设置一个变量(检查触摸支持非常困难),然后使用它绑定触摸事件或点击事件。true。。我希望能支持像我的华硕平板电脑这样的设备,我有时会使用鼠标,有时也会使用触摸屏。这就是为什么我一直避免这样做。我希望有人能用一些神奇的javascript来缩小触控触发器的宽半径或扩展触控启动的半径…@tmsimont好吧,要意识到的是,如果你取消触控事件,点击事件就不会被触发,所以这就是你建立适当支持的方式。但要做到这一点/正确/比听起来更难(部分原因是表面windows平板电脑和华硕安卓平板电脑都以不同的方式工作)。我在尝试支持两者时遇到了一些麻烦,但我确实在windows touch+鼠标、android和iOS上实现了。。这种广泛的接触范围是我唯一剩下的头痛。现在我不得不告诉客户,除非我们用您描述的方法重建,否则没有办法解决这个问题。我想就是这样吧!嘿,特雷弗,你有你贴上的例子吗?它看起来像是掉下来了
<div id="wrapper">
  <a id="button" href="#">&nbsp;</a>
</div>
<div id="log">Log:<br></div>
  #wrapper {
      padding:50px;
  }
  #button {
      display:block;
      width:200px;
      height:40px;
      text-decoration:none;
      color:#333;
      background-color:#efefef;
      border:0px;
      padding:0px;
      margin:0px;
  }