【发布时间】:2022-02-05 21:13:19
【问题描述】:
一直在尝试解决在执行 HTML5 拖动之前立即清除内容选择所涉及的各种跨浏览器问题。
目前的进展在这里: https://jsfiddle.net/kamelkev/36ek328t/
$(document).ready(function() {
var down = 0;
$(document.body).on('dragstart.draggable', function(event) {
if (!$(event.target).attr('draggable')) {
event.preventDefault();
}
return;
});
$('div[draggable]').on('dragstart', function(event) {
event.originalEvent.dataTransfer.setData("Text", '');
});
$('div[draggable]').on('mousedown.selections', function(event) {
down = 1;
return true;
});
$('div[draggable]').on('mouseup.selections', function(event) {
down = 0;
return true;
});
$('div[draggable]').on('mousemove.selections', function(event) {
var doc = event.target.ownerDocument;
if (down) {
if (doc.selection) {
doc.selection.empty();
}
else if (doc.getSelection) {
if (doc.getSelection().empty) { // Chrome
doc.getSelection().empty();
}
else if (doc.getSelection().removeAllRanges) { // Firefox
doc.getSelection().removeAllRanges();
}
}
down = 0;
}
else {
down = 0;
}
return true;
});
});
在 Chrome/Safari/Firefox 中,您会注意到选择所有(command-a)内容并在“thing2”上执行拖动不仅会清除选择,但允许拖动事件继续进行。由于某种原因,IE 清除了选择,但随后似乎取消了随后的 dragstart 事件。
我可以在 Microsoft 自己的文档或其他地方找到对此类行为的零引用。任何指针都非常感谢。
我已经尝试了很多方法来解决这个问题,将我的各种选择清除代码移动到不同的事件等中,但没有运气。
关于如何解决这个问题的任何想法?
我这样做是为了避免在执行 HTML5 拖动时出现拖动图像问题。您在执行 HTML5 拖动时看到的“幽灵”图像是从所有拖动内容的总和部分生成的,而不是从被拖动的元素中生成的。如果用户碰巧进行了全选,那么随后生成的拖动图像将使用幻影图像的所有内容,而不仅仅是被拖动元素的内容。对于 Firefox/Safari/Chrome 来说不是问题,因为您可以设置自定义拖动图像,但对于 IE,几乎没有其他选择。
【问题讨论】:
标签: javascript html jquery internet-explorer jquery-events