创建一个 dropzone 元素(我使用了一个元素,但您可以创建一个不同的元素):
<main></main>
<script>
const dropzone = document.querySelector('main');
</script>
给 dropzone 一个虚线边框样式:
<style>
main {
border: 1px border lightgray;
width: 100px;
height: 100px;
}
</style>
在触发 dragenter 事件时突出显示 dropzone(图像被拖到 dropzone 上):
<style>
.active {
border: 1px dashed black;
}
</style>
<script>
// ...
dropzone.addEventListener('dragenter', event => {
event.preventDefault();
dropzone.classList.add('active');
});
event.preventDefault() is necessary or else the image will be opened from your local file explorer.
在触发 dragleave 事件时移除 dropzone 突出显示(图像不再拖到 dropzone 上):
<script>
// ...
dropzone.addEventListener('dragleave', event => {
event.preventDefault();
dropzone.classList.remove('active');
});
</script>
必须在 drop 发生之前处理 dragover 事件:
<script>
// ...
dropzone.addEventListener('dragover', event => {
event.preventDefault();
});
</script>
现在处理 drop 事件(当图像在 dropzone 内释放时):
<script>
// ...
dropzone.addEventListener('drop', event => {
event.preventDefault();
dropzone.classList.remove('active');
const file = event.dataTransfer.files[0];
const reader = new FileReader();
reader.readAsDataURL(file);
reader.addEventListener('loadend', () => {
const img = document.createElement('img');
img.src = reader.result;
dropzone.append(img);
});
});
</script>