javascript - 在触摸屏上拖放

标签 javascript drag-and-drop touch

我一直在寻找有关这些事件如何运作的清晰指南,但现在我比开始时更加困惑。

我网站的某些功能涉及拖放。目前,移动设备(或任何没有鼠标的设备)都支持让用户选择项目,点击“移动”按钮,然后触摸放置点。虽然这非常有效(项目位于可见的网格上),但它并不像拖动那样用户友好。

我最初的理解是,无论我在哪里分配 element.onmousedownelement.onmousemoveelement.onmouseup 我也可以简单地分配分别与 element.ontouchstartelement.ontouchmoveelement.ontouchend 相同的处理程序。

然而,这留下了以下问题:

  • 如何获取触摸点的坐标,它相对于什么?
  • 是否会平移 View (拖动的默认操作),如果是,是否可以取消?
  • 如果一根手指恰好在可拖动元素上,我该如何避免干扰多点触控操作(例如捏合缩放)?

最佳答案

其他答案更好地解决了原始问题,但对于像我一样发现此链接试图使现有的点击/拖动(鼠标)功能在触摸屏上工作的后代来说,这是一个非常简单的解决方案。

如果您要添加事件监听器,则可以像这样向“mousedown”添加相应的“touchstart”行:

 document.getElementById('throttle').addEventListener('mousedown', mouseDown, false);
 document.getElementById('throttle').addEventListener('touchstart', mouseDown, false);

对任何 mousemove (touchmove) 和 mouseup (touchend) 执行相同的操作。

在您的函数中,当您获得鼠标坐标时,使用:

  var top = e.clientY || e.targetTouches[0].pageY; //the same syntax for the x value

这样它会首先检查鼠标单击和拖动,然后如果未定义,它会查找触摸交互。

就像我说的,非常准系统,但它让我开始了。

关于javascript - 在触摸屏上拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11817750/

相关文章:

javascript - PHP call_user_func 像 Javascript 调用一样绑定(bind) thisArg

android - 在 ScrollView android 中自由拖动 View

winforms - 如何在 Winforms 跨进程拖/放期间推迟 DataObject 的 "rendering"

jquery - SmoothDivScroll 可点击项目

Android - 在 subview 触摸上忽略父 View 触摸

javascript - JavaScript 中的鼠标操作与触摸事件

javascript - 如何在组件方法中具有可访问的变量

javascript - jQuery 跨源 Ajax 请求上未捕获的类型错误

javascript - 如何自动填充tinymce的内容?

.net - 从 GroupWise 中的电子邮件文件附件拖放到 .NET 应用程序