javascript - 在 Windows Chrome #74 上访问触摸属性

标签 javascript d3.js drag dom-events

我遇到了提出的问题 herehere .我的 d3 应用程序通过 Mac 上的触摸屏在 Chrome 上完美运行,但是当我切换到运行 Chrome v.74 的 Windows 生产机器时 d3.drag 失败。我按照上面链接页面的建议应用了解决方案 .touchable(navigator.maxTouchPoints)。这让我可以使用触摸屏在 Windows Chrome v.74 中拖动元素,但现在得到:

UncaughtTypeError: Failed to execute 'elementFromPoint' on 'Document': The provided double value is non-finite.

所以我的拖动事件没有触发。

我正在使用 document.elementFromPoint() 来检测拖动的元素何时位于另一个元素之上:

this.svg.dragCirclesGroup
   .call(drag()
     .touchable(navigator.maxTouchPoints)
     .on("start", this.dragStarted)
     .on("drag", this.dragged)
     .on("end", this.dragEnded));

dragged() {
  select(this).attr("transform","translate("+[event.x,event.y]+")")
  let hitZone = select(document.elementFromPoint(event.sourceEvent.clientX, event.sourceEvent.clientY)).attr("id");
  if ((hitZone == "yHitZone") || (hitZone == "xHitZone")) {
    select('body').classed("plus", true);
  } else {
    select('body').classed("plus", false);
  }
}

这是一个仅限触摸的问题,因为当我使用鼠标时拖动和 document.elementFromPoint 工作得很好。

最佳答案

Can't get coordinates of touchevents in Javascript on Android devices提供的解决方案和 Is there an equivalent to e.PageX position for 'touchstart' event as there is for click event?不适用于 Windows 10 的 Chrome #74。要访问拖动事件 e 的适用 TouchLists 和坐标,您可以使用

e.sourceEvent.touches.item(0).clientXe.sourceEvent.touches.item(0).clientY

用于拖动和

e.sourceEvent.changedTouches.item(0).clientXe.sourceEvent.changedTouches.item(0).clientY

为拖动结束时的坐标。

您可以通过记录 e.sourceEvent 来查看。这SO answer详细介绍了不同的触摸列表,这也很有帮助。

因此要在此环境中执行 document.elementFromPoint,您将使用

document.elementFromPoint(e.sourceEvent.changedTouches.item(0).clientX, e.sourceEvent.changedTouches.item(0).clientY)

关于javascript - 在 Windows Chrome #74 上访问触摸属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55940323/

相关文章:

javascript - 如何使用 d3.js 在折线图上的某个点显示图标

javascript - Materialize CSS 错误标签

Javascript 检测屏幕分辨率,更改 css,相应地裁剪图像

javascript - 如何将 dwr 回调转换为带有 Promise 的 Rest fetch?

javascript - d3.js 如何将参数传递给php以获取查询条件

javascript - 进入-更新-退出模式后节点的 x 和 y 属性丢失

flutter - 我如何通过拖动它们来选择小部件,但也可以在 flutter 中单独单击它们?

swift - 在范围内找不到类型 'View'

javascript - D3js 找到圆上最近的点

javascript - 获取可拖动对象相对于 div 的位置