当前位置:首页 > JavaScript

js实现图片拖拽

2026-01-16 13:11:31JavaScript

实现图片拖拽的基本步骤

HTML 结构需要包含可拖拽的图片元素,并设置 draggable 属性为 true

<img id="dragImage" src="image.jpg" draggable="true">

添加拖拽事件监听

为图片元素添加 dragstart 事件监听器,用于设置拖拽数据:

js实现图片拖拽

const dragImage = document.getElementById('dragImage');
dragImage.addEventListener('dragstart', (e) => {
    e.dataTransfer.setData('text/plain', e.target.id);
});

设置放置目标区域

创建放置区域并添加 dragoverdrop 事件监听器。dragover 需阻止默认行为以允许放置:

const dropZone = document.getElementById('dropZone');
dropZone.addEventListener('dragover', (e) => {
    e.preventDefault();
});

dropZone.addEventListener('drop', (e) => {
    e.preventDefault();
    const id = e.dataTransfer.getData('text/plain');
    const draggedElement = document.getElementById(id);
    e.target.appendChild(draggedElement);
});

完整代码示例

<!DOCTYPE html>
<html>
<head>
    <title>图片拖拽示例</title>
    <style>
        #dropZone {
            width: 300px;
            height: 300px;
            border: 2px dashed #ccc;
            padding: 10px;
        }
    </style>
</head>
<body>
    <img id="dragImage" src="image.jpg" draggable="true" width="100">
    <div id="dropZone">将图片拖放到此处</div>

    <script>
        const dragImage = document.getElementById('dragImage');
        const dropZone = document.getElementById('dropZone');

        dragImage.addEventListener('dragstart', (e) => {
            e.dataTransfer.setData('text/plain', e.target.id);
        });

        dropZone.addEventListener('dragover', (e) => {
            e.preventDefault();
        });

        dropZone.addEventListener('drop', (e) => {
            e.preventDefault();
            const id = e.dataTransfer.getData('text/plain');
            const draggedElement = document.getElementById(id);
            e.target.appendChild(draggedElement);
        });
    </script>
</body>
</html>

高级功能扩展

拖拽过程中可以添加视觉反馈,例如修改放置区域的样式:

js实现图片拖拽

dropZone.addEventListener('dragenter', (e) => {
    e.target.style.border = '2px dashed #000';
});

dropZone.addEventListener('dragleave', (e) => {
    e.target.style.border = '2px dashed #ccc';
});

跨元素拖拽支持

若需支持多个拖拽元素,可通过类选择器批量绑定事件:

document.querySelectorAll('.draggable').forEach(item => {
    item.addEventListener('dragstart', (e) => {
        e.dataTransfer.setData('text/plain', e.target.id);
    });
});

移动而非复制元素

默认行为会复制元素,若需移动可在原位置移除元素:

dropZone.addEventListener('drop', (e) => {
    e.preventDefault();
    const id = e.dataTransfer.getData('text/plain');
    const draggedElement = document.getElementById(id);
    draggedElement.parentNode.removeChild(draggedElement);
    e.target.appendChild(draggedElement);
});

标签: 拖拽图片
分享给朋友:

相关文章

vue实现图片查看

vue实现图片查看

Vue 实现图片查看功能 在 Vue 中实现图片查看功能,可以通过原生实现或使用第三方库。以下是几种常见的方法: 原生实现方式 使用 Vue 的指令和事件绑定实现基础的图片查看功能。 <te…

vue实现拖拽计算器

vue实现拖拽计算器

Vue实现拖拽计算器的步骤 创建Vue项目 使用Vue CLI创建一个新项目,确保已安装Vue和必要的依赖项。通过命令行初始化项目并安装依赖。 vue create drag-calculator…

vue2实现图片懒加载

vue2实现图片懒加载

实现图片懒加载的方法 在Vue2中实现图片懒加载可以通过以下方法完成,核心原理是监听图片是否进入可视区域,再动态加载图片资源。 使用IntersectionObserver API Intersec…

vue实现拖拽实现布局

vue实现拖拽实现布局

Vue 实现拖拽布局的方法 使用 Vue.Draggable 库 Vue.Draggable 是基于 Sortable.js 的 Vue 组件,适合实现列表或网格的拖拽排序。 安装依赖: npm…

vue实现图片查看

vue实现图片查看

实现图片查看功能 在Vue中实现图片查看功能可以通过多种方式完成,常见的有使用原生HTML5的<dialog>元素、第三方组件库(如Element UI、Vant等)或专用插件(如view…

vue图片实现多选

vue图片实现多选

Vue 图片多选实现方法 在 Vue 中实现图片多选功能可以通过以下几种方式完成,具体取决于项目需求和复杂度。 使用 v-model 和数组存储选中状态 通过 v-model 绑定一个数组来记录选中…