当前位置:首页 > 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 实现图片取色功能 使用 Canvas API 提取颜色 在 Vue 项目中,可以通过 Canvas API 实现图片取色功能。创建一个组件,利用 ref 获取图片元素并绘制到 Canvas 上…

css动画制作图片

css动画制作图片

CSS动画制作图片的方法 使用CSS动画可以为图片添加各种动态效果,提升网页的视觉吸引力。以下是几种常见的CSS动画实现方式: 关键帧动画(@keyframes) 通过定义关键帧来控制动画的各个阶…

vue实现拖拽到容器里

vue实现拖拽到容器里

实现拖拽到容器的基本步骤 安装并引入 Vue.Draggable 库,这是一个基于 Sortable.js 的 Vue 拖拽组件。可以通过 npm 或 yarn 进行安装。 npm install…

vue 实现拖拽

vue 实现拖拽

Vue 实现拖拽功能的方法 在 Vue 中实现拖拽功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 drag…

jquery 图片

jquery 图片

jQuery 图片操作 jQuery 提供了多种方法来操作图片,包括加载、显示、隐藏、调整尺寸等。以下是一些常见的图片操作方法: 动态加载图片 使用 attr() 方法可以动态修改图片的 src…

vue拖拽实现方式

vue拖拽实现方式

Vue 拖拽实现方式 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件(如 dragstart、dragend、dragover、…