当前位置:首页 > JavaScript

js实现拖动div

2026-04-04 00:21:06JavaScript

实现拖动 div 的基本步骤

使用 JavaScript 实现拖动 div 的功能可以通过监听鼠标事件来完成。以下是实现的基本方法:

HTML 结构

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

JavaScript 代码

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;
    const x = e.clientX - offsetX;
    const y = e.clientY - offsetY;

    // 限制在视口内拖动
    const maxX = window.innerWidth - draggable.offsetWidth;
    const maxY = window.innerHeight - draggable.offsetHeight;

    draggable.style.left = `${Math.max(0, Math.min(x, maxX))}px`;
    draggable.style.top = `${Math.max(0, Math.min(y, maxY))}px`;
});

使用 CSS 提升拖动效果

添加 CSS 可以提升拖动的视觉效果:

#draggable {
    cursor: grab;
    user-select: none;
}

#draggable:active {
    cursor: grabbing;
}

支持触摸设备

如果需要支持触摸设备,可以添加触摸事件监听:

draggable.addEventListener('touchstart', (e) => {
    isDragging = true;
    offsetX = e.touches[0].clientX - draggable.offsetLeft;
    offsetY = e.touches[0].clientY - draggable.offsetTop;
});

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

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

封装为可复用的函数

可以将拖动逻辑封装为函数,方便复用:

js实现拖动div

function makeDraggable(element) {
    let isDragging = false;
    let offsetX, offsetY;

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

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

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

// 使用
makeDraggable(document.getElementById('draggable'));

注意事项

  • 确保拖动的元素设置了 position: absoluteposition: fixed
  • 避免在拖动过程中选中文本,可以通过 CSS 的 user-select: none 实现。
  • 对于复杂的拖动需求(如限制拖动方向或范围),可以进一步扩展逻辑。

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

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…