Have a look at this fiddle: https://jsfiddle.net/zanpx9mw/1/
Code:
const draggable_element = document.getElementById("draggable_element");
draggable_element.addEventListener("dragstart", (e) => {
const rect = e.srcElement.getBoundingClientRect();
const dt = e.dataTransfer;
dt.setData("dx", `${Math.round(e.clientX - rect.x)}`);
dt.setData("dy", `${Math.round(e.clientY - rect.y)}`);
[...dt.items].forEach(it => {
console.log(`dragstart ${it.type}: ${dt.getData(it.type)}`);
});
});
draggable_element.addEventListener("dragover", (e) => {
const dt = e.dataTransfer;
[...dt.items].forEach(it => {
console.log(`dragover ${it.type}: ${dt.getData(it.type)}`);
});
});
On Firefox I can store data inside the events dataTransfer
object in the dragstart
event and read it later in the dragover
event.
In Chromium/Chrome however I can store the data and read it successfully inside the dragstart
event but not in the dragover
event anymore. Strangely items with the expected names are still present but the data seems to be empty.
There is a funny workaround though: I can just save the data inside the item type but that seems wrong..
Is this known behavior? Am I doing something wrong?