javascript实现dom元素可拖动

yizhihongxing

要实现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日

相关文章

  • javascript从右边截取指定字符串的三种实现方法

    如下是关于”javascript从右边截取指定字符串的三种实现方法”的攻略解释。 概述 当我们在实际的 Javascript 开发过程中处理一个字符串的时候,会经常遇到需要从字符串的右边开始截取指定长度的字符的需求。下面将会介绍三种实现 “javascript从右边截取指定字符串” 的方法。 方法一:使用String对象的slice()方法 slice()方…

    JavaScript 2023年5月28日
    00
  • js学习总结之DOM2兼容处理this问题的解决方法

    首先我们需要知道什么是DOM2以及this问题。 DOM2是指在HTML文档中操作各个元素的JavaScript API标准,与DOM1相比,DOM2提供了更加完善、更加准确、更加稳定、更加规范的处理HTML元素的方法。 this问题则是指JavaScript中this的指向问题,由于this的指向不确定,经常会导致我们编写的代码出现问题。在DOM2兼容处理…

    JavaScript 2023年6月10日
    00
  • JavaScript中数组的排序、乱序和搜索实现代码

    下面是关于JavaScript中数组排序、乱序、搜索的完整攻略。 数组排序 sort()方法 sort()方法是 JavaScript 中的一个数组方法,用于对数组进行排序,该方法会改变原数组。sort()方法会将数组中的每个元素转化为字符串,然后通过比较它们的 Unicode 值(从左到右逐个比较对应的 ASCII 码值),来确定数组中元素的顺序。sort…

    JavaScript 2023年5月27日
    00
  • 浅谈Javascript事件处理程序的几种方式

    浅谈Javascript事件处理程序的几种方式 Javascript作为一门客户端脚本语言,广泛应用于网页开发中。为了实现网页动态效果和交互功能,Javascript提供了一系列的事件处理程序。本篇文章将介绍Javascript事件处理程序的几种常用方式,以及它们的优缺点。 1. 在HTML中添加事件处理程序 在HTML元素的属性中添加事件处理程序是一种简单…

    JavaScript 2023年5月27日
    00
  • js 获取html5的data属性实现方法

    获取HTML5的data属性实现方法 在HTML5中的data属性可以以简单且可读性高的方式为元素添加数据,但是在JavaScript中获取这些属性的值并不像其他一些属性那样直观。下面介绍几种方法来获取HTML5的data属性。 1. 使用getAttribute() 我们可以使用DOM的 getAttribute() 方法来获取HTML5的data属性。示…

    JavaScript 2023年6月10日
    00
  • JS 函数的 call、apply 及 bind 超详细方法

    JS 函数的 call、apply 及 bind 超详细方法 在 JavaScript 中,我们可以用 call、apply、bind 等方法来改变函数的调用方式或绑定上下文。这些方法的使用可以避免代码的重复,提高代码的可重用性,同时也可以更好的管理函数的上下文。 call 方法 call 方法可以将一个函数的 this 指向指定的对象,并且立刻执行该函数。…

    JavaScript 2023年6月10日
    00
  • Javascript中的数据类型之旅

    好的。首先,“JavaScript中的数据类型之旅”是一篇介绍JavaScript数据类型的文章,可以帮助初学者更好地了解JavaScript数据类型。下面是我为你准备的完整攻略: JavaScript中的数据类型之旅 1. 基本数据类型 JavaScript中有6种基本数据类型:String(字符串)、Number(数字)、Boolean(布尔)、Null…

    JavaScript 2023年5月27日
    00
  • javascript正则表达式标记中/g /i /m的用法,以及实例

    下面是JavaScript正则表达式标记中/g /i /m的用法以及示例: 1. /g标记 /g标记表示全局匹配,表示正则表达式将会对文本中所有的匹配项进行匹配。如果不加/g标记,只会返回第一个匹配结果。 示例: const str = "hello, world! hello, JavaScript!"; const regex = /…

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