<!DOCTYPE html>
<html lang=en>
<title>设置拖拽图片demo - DataTransfer.setDragImage()</title>
<meta name="viewport" content="width=device-width">
<style>
div {
margin: 0em;
padding: 2em;
}
#source {
color: blue;
border: 1px solid black;
}
#target {
border: 1px solid black;
}
</style>
<script>
// 预加载图片
(new Image()).src = `https://h5.bestwehotel.com/storage/download/3a4fd61b-f818-4def-bd51-0ce4ab4c515c/we_1612513678550.png?x-oss-process=image/resize,h_200`;
function dragstart_handler(ev) {
console.log("拖拽开始");
// 设置数据
ev.dataTransfer.setData("originElementId", ev.target.id);
// 创建一个图像并且使用它作为拖动图像
// 请注意:图片要求已经加载,否则浏览器将会使用默认的拖动图片
// 默认的拖动图片与拖动对象没有联系。一般是一个小型文件图标
// 开启开发工具的"disable cache"会使预加载图片无效,导致显示不了图片
var img = new Image();
img.src = `https://h5.bestwehotel.com/storage/download/3a4fd61b-f818-4def-bd51-0ce4ab4c515c/we_1612513678550.png?x-oss-process=image/resize,h_200`;
ev.dataTransfer.setDragImage(img, 10, 10);
}
function dragover_handler(ev) {
console.log("有拖拽对象进入");
ev.preventDefault();
}
function drop_handler(ev) {
console.log("松开拖拽");
ev.preventDefault();
// 获取拖放对象设置的数据
var data = ev.dataTransfer.getData("originElementId");
ev.target.appendChild(document.getElementById(data));
}
</script>
<body>
<h1>例子: <code>DataTransfer.setDragImage()</code></h1>
<div>
<p id="source" ondragstart="dragstart_handler(event);" draggable="true">拖动此元素,到"拖拽松开区域",松开拖拽后移动这个元素到松开区域。</p>
</div>
<div id="target" ondrop="drop_handler(event);" ondragover="dragover_handler(event);">拖拽松开区域</div>
</body>
</html>
效果图:
image.png
网友评论