【发布时间】:2012-06-19 10:00:03
【问题描述】:
我正在尝试使用 HTML5 可拖动 API(尽管我意识到它has its problems)。到目前为止,我遇到的唯一阻碍是当dragover 或dragenter 事件触发时,我无法确定要拖动的内容:
el.addEventListener('dragenter', function(e) {
// what is the draggable element?
});
我意识到我可以假设它是触发dragstart 事件的最后一个元素,但是……多点触控。我也尝试过使用来自dragstart 的e.dataTransfer.setData 来附加一个唯一标识符,但显然该数据是来自dragover/dragenter 的inaccessible:
只有在 drop 事件期间发生 drop 时,此数据才可用。
那么,有什么想法吗?
更新:在撰写本文时,HTML5 拖放功能似乎还没有在任何主要的移动浏览器中实现,这使得多点触控在实践中没有实际意义。但是,我想要一个保证在 the spec 的任何实现中都能工作的解决方案,这似乎不会阻止同时拖动多个元素。
我在下面发布了a working solution,但这是一个丑陋的黑客。我仍然希望得到更好的答案。
【问题讨论】:
-
通常你应该能够使用函数内部的“this”属性,它链接到触发事件的对象。
-
@lgomezma 不,
this在dragenter/dragover事件处理程序中指向被拖动的元素,而不是被拖动的元素。它等于e.target。示例:jsfiddle.net/TrevorBurnham/jWCSB -
我认为微软在originally designed and implemented drag-and-drop for IE 5 时并没有考虑多点触控。
-
@JefferyTo 我知道这一点,但现在他们的设计已被编入标准,我想通过与WHATWG spec 合作,而不仅仅是现有的实现来保证未来的发展。
-
针对规范提交了这个错误 - w3.org/Bugs/Public/show_bug.cgi?id=23486
标签: javascript html draggable