当前位置:首页 > 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
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…

js实现轮播代码

js实现轮播代码

基础轮播实现 使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。 <div class="carousel"> <div c…