javascript - 在 Windows Chrome #74 上访问触摸属性
问题描述
我遇到了这里和这里提出的问题。我的 d3 应用程序通过 Mac 上的触摸屏在 Chrome 上完美运行,但是当我切换到运行 Chrome v.74 的 Windows 生产机器时,d3.drag 失败了。.touchable(navigator.maxTouchPoints)
正如上面链接页面所建议的那样,我应用了解决方案。这使我可以使用触摸屏在 Windows Chrome v.74 中拖动元素,但现在得到:
UncaughtTypeError:无法在“文档”上执行“elementFromPoint”:提供的双精度值是无限的。
所以我的拖动事件没有触发。
我正在使用 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 coordinate of touchevents in Javascript on Android devices和'touchstart' 事件的 e.PageX 位置是否与点击事件相同?不适用于 Windows 10 的 Chrome #74。要访问适用的 TouchLists 和拖动事件坐标e
,您可以使用
e.sourceEvent.touches.item(0).clientX
和e.sourceEvent.touches.item(0).clientY
用于拖动和
e.sourceEvent.changedTouches.item(0).clientX
和e.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)
推荐阅读
- android - 如果用户2手机的屏幕使用推送关闭,如何向用户1发送XMPP消息确认(双勾)?
- .net - dotnet 发布“无法加载源 https://api.nuget.org/v3/index.json 的服务索引”
- c - 从 Buff 加载文件
- docker - Eureka-client 无法调用另一个 Eureka-client,抛出 UnknownHostException
- python - 作为 Python 程序的一部分运行 OpenCV 脚本
- python - 如何遍历 Odoo 9 Qweb 中的对象列表并获取每个对象?
- react-native - 在 react-native-maps 上更改区域坐标时出错
- php - 拉取代码后的问题 [Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException]
- java - 有人可以告诉是否有任何用于循环队列的 java 内置包?
- go - go modules 多个主要方法