当前位置:首页 > JavaScript

js实现拖动

2026-03-15 08:27:13JavaScript

实现基本拖动功能

使用HTML5的拖放API可以快速实现元素拖动。为元素添加draggable="true"属性,并监听相关事件:

const draggableElement = document.getElementById('draggable');

draggableElement.addEventListener('dragstart', (e) => {
  e.dataTransfer.setData('text/plain', e.target.id);
});

document.addEventListener('dragover', (e) => {
  e.preventDefault();
});

document.addEventListener('drop', (e) => {
  e.preventDefault();
  const id = e.dataTransfer.getData('text/plain');
  const element = document.getElementById(id);
  element.style.left = `${e.clientX}px`;
  element.style.top = `${e.clientY}px`;
});

自定义拖动逻辑

通过鼠标事件实现更灵活的拖动控制:

js实现拖动

let isDragging = false;
let offsetX, offsetY;

element.addEventListener('mousedown', (e) => {
  isDragging = true;
  offsetX = e.clientX - element.getBoundingClientRect().left;
  offsetY = e.clientY - element.getBoundingClientRect().top;
  element.style.position = 'absolute';
});

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;
});

限制拖动范围

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

js实现拖动

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

  const x = e.clientX - offsetX;
  const y = e.clientY - offsetY;
  const maxX = window.innerWidth - element.offsetWidth;
  const maxY = window.innerHeight - element.offsetHeight;

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

拖动手柄实现

只允许通过特定元素触发拖动:

const handle = document.querySelector('.drag-handle');

handle.addEventListener('mousedown', startDrag);
element.addEventListener('mousedown', (e) => {
  if (e.target !== handle) return;
  startDrag(e);
});

触摸设备支持

添加触摸事件处理实现移动端兼容:

element.addEventListener('touchstart', (e) => {
  const touch = e.touches[0];
  offsetX = touch.clientX - element.getBoundingClientRect().left;
  offsetY = touch.clientY - element.getBoundingClientRect().top;
  isDragging = true;
  e.preventDefault();
});

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

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

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

相关文章

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…

js实现菜单

js实现菜单

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

js图片轮播的实现

js图片轮播的实现

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

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…