javascript实现dom元素可拖动

要实现DOM元素可拖动,需要以下步骤:

  1. 给目标元素添加mousedown事件监听器,当鼠标按下时触发事件,并将鼠标在元素上的位置信息存储起来。

  2. document对象添加mousemove事件监听器,当鼠标移动时触发事件,并计算出移动的距离。

  3. mousemove事件中,根据鼠标移动的距离,重新设置目标元素的位置。

  4. 当鼠标松开时,移除事件监听器。

以下是实现DOM元素可拖动的示例代码:

<!-- HTML结构 -->
<div id="draggable">可拖动的元素</div>
// JavaScript代码
var draggable = document.getElementById('draggable');
var mouseX, mouseY, elementX, elementY;

draggable.addEventListener('mousedown', function(event) {
  elementX = draggable.offsetLeft;
  elementY = draggable.offsetTop;
  mouseX = event.pageX - elementX;
  mouseY = event.pageY - elementY;
  document.addEventListener('mousemove', handleMouseMove);
  document.addEventListener('mouseup', handleMouseUp);
});

function handleMouseMove(event) {
  draggable.style.left = (event.pageX - mouseX) + 'px';
  draggable.style.top = (event.pageY - mouseY) + 'px';
}

function handleMouseUp(event) {
  document.removeEventListener('mousemove', handleMouseMove);
  document.removeEventListener('mouseup', handleMouseUp);
}

上面的代码中,首先获取了目标元素draggable的引用,然后在mousedown事件中获取元素当前的位置,并计算出鼠标在元素上的位置偏移量。然后添加mousemovemouseup事件监听器,分别在移动和松开鼠标时触发。在handleMouseMove函数中,根据计算出的偏移量设置元素的位置。在handleMouseUp函数中,移除事件监听器。

下面是另一个实现DOM元素可拖动的示例代码:

<!-- HTML结构 -->
<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
  <li>Item 4</li>
</ul>
// JavaScript代码
var items = document.querySelectorAll('li');
var mouseX, mouseY, elementX, elementY, dragging;

for (var i = 0; i < items.length; i++) {
  var item = items[i];
  item.addEventListener('mousedown', handleMouseDown);
  item.addEventListener('mouseup', handleMouseUp);
}

function handleMouseDown(event) {
  dragging = event.target;
  elementX = event.target.offsetLeft;
  elementY = event.target.offsetTop;
  mouseX = event.pageX - elementX;
  mouseY = event.pageY - elementY;
  event.target.style.backgroundColor = '#ddd';
}

function handleMouseUp(event) {
  event.target.style.backgroundColor = '';
}

document.addEventListener('mousemove', handleMouseMove);

function handleMouseMove(event) {
  if (dragging) {
    dragging.style.left = (event.pageX - mouseX) + 'px';
    dragging.style.top = (event.pageY - mouseY) + 'px';
  }
}

上面的代码中,首先获取了所有li元素,并遍历添加mousedownmouseup事件监听器。在handleMouseDown函数中,获取当前按下鼠标的元素,并计算出偏移量,并且给元素加上灰色背景色表明这个元素正在被拖动。在handleMouseUp函数中,通过清空背景色表示这个元素已经不再被拖动了。在handleMouseMove函数中,根据计算出的偏移量设置元素的位置。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript实现dom元素可拖动 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 解决js ajax同步请求造成浏览器假死的问题

    首先,我们需要了解什么是ajax同步请求造成浏览器假死的问题。 当我们发送一个ajax同步请求时,浏览器会阻塞页面的渲染直到请求完成。这意味着如果请求需要很长时间才能完成,那么用户就无法操作页面。这通常被称为浏览器的“假死”问题。 那么,如何解决这个问题呢?以下是一些可能的解决方案: 1. 使用异步请求 将ajax请求设置为异步请求,而不是同步请求。这可以通…

    JavaScript 2023年6月11日
    00
  • JS简单实现移动端日历功能示例

    首先,实现移动端日历功能需要考虑日期的显示、日期的选择和切换不同月份等问题,以下是一个完整攻略: 设计思路 在页面中渲染日历主体部分,包括日期、星期、月份等。 通过 JavaScript 操作获取当前时间,并根据当前时间初始化日历的显示。 实现日历的月份、日期的切换。 实现日期的选择,可以记录选中的日期并高亮显示。 代码实现 HTML 结构 首先,我们需要在…

    JavaScript 2023年5月28日
    00
  • javaScript中封装的各种写法示例(推荐)

    JavaScript中封装的各种写法示例,可以用于将代码进行模块化,提高代码复用性和可维护性。以下是常用的封装写法及示例说明: 函数封装 在JavaScript中,最常用的封装方式就是使用函数进行封装。函数封装可以将一段功能代码封装成一个具有独立作用的函数,以便多次调用、重复使用。下面是一个简单的加减乘除的函数封装示例: // 定义一个加减乘除的函数计算器 …

    JavaScript 2023年6月10日
    00
  • 详解AngularJS Filter(过滤器)用法

    详解AngularJS Filter(过滤器)用法 什么是AngularJS Filter? AngularJS Filter(过滤器) 是AngularJS中的一种自定义组件,它可以对要展示在AngularJS应用程序模板上的数据进行数量、格式和类型等方面的过滤或转换,相当于是数据的预处理器。使用过滤器,可以让我们更加方便,快捷地展示数据。 例如,用户搜索…

    JavaScript 2023年6月10日
    00
  • JavaScript的11个小技巧整理

    JavaScript的11个小技巧整理 在这篇文章中,我们将学习JavaScript中一些有用的小技巧,这些技巧可能会使我们的代码更加简短和高效。 1. 数组拆分和连接 在JavaScript中,我们可以使用扩展运算符 … 来拆分和连接数组。 数组拆分 例如,我们可以将一个数组拆分成两个数组: const arr = [1, 2, 3, 4, 5]; c…

    JavaScript 2023年5月17日
    00
  • Javascript 函数中的参数使用分析

    下面是关于“JavaScript 函数中的参数使用分析”的攻略。 函数中参数的基本用法 在 JavaScript 函数中,参数是指在函数定义中列出的变量名称。当调用函数时,传递给函数的值是参数值。在函数内部,参数扮演着变量的角色,通过它们我们可以得到调用函数的值。以下是一个简单的函数定义示例: function greet(name) { console.l…

    JavaScript 2023年5月27日
    00
  • typeScript入门基础介绍

    TypeScript入门基础介绍 TypeScript 是一种由 Microsoft 开发的编程语言,它是 JavaScript 的一个超集。它扩展了 JavaScript 的语法,添加了强类型定义和面向对象编程的特性,并提供了更好的开发环境支持。 环境搭建 在使用 TypeScript 之前,我们需要先搭建环境。以下为搭建环境的步骤: 安装 Node.js…

    JavaScript 2023年6月10日
    00
  • 浅谈几种常用的JS类定义方法

    下面是“浅谈几种常用的JS类定义方法”的详细讲解,包含两条示例说明。 一、介绍 在JavaScript中,我们可以使用多种方式来定义和创建自己的类。本文将介绍常用的几种JS类定义方法,以及它们之间的区别和优缺点,帮助读者选取更适合自己的方式来定义类。 二、JS类定义方法 1.函数对象法 这是最常见的一种定义JS类的方法。通过创建一个函数来表示类,然后使用ne…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部