【发布时间】:2026-02-13 16:25:03
【问题描述】:
我在我的代码中使用 draggable,如下所示: 首先创建和附加元素:
let myImg = document.createElement("img");
myImg.setAttribute('src', ...);
myImg.id = some_value;
myImg.className = "store_img";
myImg.draggable = true;
myImg.addEventListener('dragstart',function(event){
event.dataTransfer?.setData("text", somedata);
myImg.style.opacity = "0.5";
myImg.addEventListener('dragend',function(){
mask.style.opacity = "1";
document.getElementById("myStorageDiv")?.appendChild(myImg);
之后,我在其他地方修改了“myStorageDiv”以允许接受可拖动:
document.getElementById("myArea")?.addEventListener('dragenter',
function(event){
event.preventDefault();
if(event.dataTransfer?.getData("className") == "store_img"){
this.style.backgroundColor = "red";
}
}, false);
最后一行告诉我“EventTarget”上不存在 className。我想使用它的原因是我有两种类型的可拖动,每种只允许一个区域,我希望这些区域在进行任何更改之前识别可拖动的来源,例如'if(event.target.className = =“StoreImg”){...}'。我还注意到dataTransfer的数据只能在Drop中使用,所以我不能为dropenter和dropleave等其他人传递className。有没有其他方法可以做到这一点?谢谢!
【问题讨论】:
-
变量
event期望哪个接口?如果您使用的是 VS Code,您应该能够通过将鼠标悬停在变量上来查看它。 -
它说'(参数)事件:DragEvent'
-
但是 className 是 HTML 元素的属性还是事件的属性?因为在我看来,您想编辑 img 元素的 className。
-
我这样做的原因是我在developer.mozilla.org/en-US/docs/Web/API/Document/drag_event 上看到了示例代码,这在我的情况下不起作用。如果我们忘记了这一点,还有其他方法吗?不必是 className,任何可以将我的可拖动对象分隔为不同类的东西?
-
用
myImg.className = "StoreImg"代替event.target.className = "StoreImg"不行吗?
标签: javascript html typescript