当前位置:首页 > JavaScript

js实现div拖拽

2026-03-01 05:57:00JavaScript

实现div拖拽的基本方法

使用JavaScript实现div拖拽功能主要依赖于鼠标事件监听和元素位置更新。以下是核心实现步骤:

HTML结构

<div id="draggable" style="width: 100px; height: 100px; background: red; position: absolute;"></div>

JavaScript实现

js实现div拖拽

const draggable = document.getElementById('draggable');
let isDragging = false;
let offsetX, offsetY;

draggable.addEventListener('mousedown', (e) => {
    isDragging = true;
    offsetX = e.clientX - draggable.offsetLeft;
    offsetY = e.clientY - draggable.offsetTop;
});

document.addEventListener('mousemove', (e) => {
    if (!isDragging) return;
    draggable.style.left = `${e.clientX - offsetX}px`;
    draggable.style.top = `${e.clientY - offsetY}px`;
});

document.addEventListener('mouseup', () => {
    isDragging = false;
});

优化拖拽体验

添加边界限制防止元素被拖出可视区域:

document.addEventListener('mousemove', (e) => {
    if (!isDragging) return;

    let newX = e.clientX - offsetX;
    let newY = e.clientY - offsetY;

    newX = Math.max(0, Math.min(newX, window.innerWidth - draggable.offsetWidth));
    newY = Math.max(0, Math.min(newY, window.innerHeight - draggable.offsetHeight));

    draggable.style.left = `${newX}px`;
    draggable.style.top = `${newY}px`;
});

使用CSS改善拖拽效果

添加过渡效果使拖动更平滑:

js实现div拖拽

#draggable {
    transition: transform 0.1s ease;
    cursor: grab;
    user-select: none;
}

#draggable:active {
    cursor: grabbing;
}

高级实现:使用transform替代top/left

性能更优的实现方式:

let posX = 0, posY = 0;
let mouseX = 0, mouseY = 0;

draggable.addEventListener('mousedown', (e) => {
    isDragging = true;
    mouseX = e.clientX;
    mouseY = e.clientY;
});

document.addEventListener('mousemove', (e) => {
    if (!isDragging) return;
    const dx = e.clientX - mouseX;
    const dy = e.clientY - mouseY;
    mouseX = e.clientX;
    mouseY = e.clientY;
    posX += dx;
    posY += dy;
    draggable.style.transform = `translate(${posX}px, ${posY}px)`;
});

拖拽事件扩展

添加自定义拖拽事件回调:

const callbacks = {
    onDragStart: () => console.log('拖拽开始'),
    onDragEnd: () => console.log('拖拽结束')
};

draggable.addEventListener('mousedown', (e) => {
    callbacks.onDragStart();
    // ...原有代码
});

document.addEventListener('mouseup', () => {
    if (isDragging) callbacks.onDragEnd();
    isDragging = false;
});

标签: 拖拽js
分享给朋友:

相关文章

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

vue拖拽实现

vue拖拽实现

vue拖拽实现方法 使用HTML5原生拖拽API HTML5提供原生拖拽API,通过draggable属性、dragstart、dragend等事件实现基础拖拽功能。 <template>…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…