当前位置:首页 > 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实现

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改善拖拽效果

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

#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实现div拖拽

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

相关文章

vue实现拖拽计算器

vue实现拖拽计算器

Vue 拖拽计算器实现方案 核心功能分析 可拖拽组件:计算器整体或按钮需要支持拖拽 2.计算逻辑:实现基本四则运算功能 布局系统:支持动态调整计算器位置 基础实现步骤 安装依赖 需要vue-dragg…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previ…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #34…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现投球

js实现投球

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