触控设备上的可拖动属性

Posted

技术标签:

【中文标题】触控设备上的可拖动属性【英文标题】:Draggable attribute on touch devices 【发布时间】:2017-01-16 22:36:02 【问题描述】:

draggable 属性似乎在触摸设备上的浏览器中无效。

<div draggable="true">Draggable Box</div>

https://jsfiddle.net/41z5uz4t/

用鼠标,我可以拖动这个元素。如果我尝试在我的触摸屏(Windows 10、Chrome)上拖动它,则常规的触摸事件(例如向后导航)似乎优先。我试过握住它,然后拖动。这也不起作用。

是否有用于在 Chrome 中修复此行为的 polyfill?我应该做一些不同的事情吗?

【问题讨论】:

【参考方案1】:

可拖动属性是“experimental technology”,目前任何主流移动浏览器都不支持它。

如果您想制作 Drag'n'Drop UI,您应该为此使用一些 JS 库,例如 greensock nice library 和 Touchpunch with jQuery UI,还有更多内容,只需在网络上搜索即可。

我要明确指出,目前主流移动浏览器不支持可拖动属性。

编辑:

似乎是像你这样的触摸屏设备在 Chrome 中的错误我找到了一个可能对你有帮助的解决方案:

转到 chrome://flags 并将“启用触摸事件”设置从“自动”更改为“启用”。当前版本的 Chrome 显然没有检测到 Windows 10 的触控功能。

找到here。

不过,如果这是一个实验性属性,您最好使用 js 库来执行该操作。

【讨论】:

我问的不是移动浏览器,我问的是带触控功能的桌面浏览器。 您链接的库的行为无法正确模拟浏览器的 draggable 行为。 不幸的是,该设置对我的系统没有影响。【参考方案2】:

你可以使用jQuery来实现这个效果。以下是如何做到这一点的指南:

http://touchpunch.furf.com/

将此代码放在带有可拖动对象的行之前:

<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script src="http://code.jquery.com/ui/1.8.21/jquery-ui.min.js"></script>

并将其放在可拖动对象的行之后:

&lt;script&gt;$('#draggablebox').draggable();&lt;/script&gt;,假设 div 的 id 为 draggablebox

【讨论】:

这不是浏览器中draggable 提供的真正行为。我想我只需要编写自己的 polyfill。

以上是关于触控设备上的可拖动属性的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Android 的可穿戴设备中创建类似可拖动菜单的东西?

Autodesk Forge Viewer - 触控设备上的多选

鼠标拖动选择不适用于触摸设备。我怎样才能使它成为可能?

如何针对触控设备优化网站

Flutter进阶—点击拖动和其他手势

具有不可拖动子图像的可拖动 div 上的 FireFox 问题