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判断样式className同时增加class或删除class

    要判断并增加或删除元素的class,可以使用JavaScript中的classList属性和toggle()方法。classList属性是一个只读的、表示元素类名的集合(DOMTokenList),可以用于添加、删除和切换类名。toggle()方法会在元素中切换一个类名(如果该类名不存在,则添加之;否则删除之)。 以下是增加class的示例: var ele…

    JavaScript 2023年6月10日
    00
  • JSON 客户端和服务器端的格式转换

    JSON(JavaScript 对象表示法)是一种轻量级数据交换格式,通常用于客户端与服务器端进行数据传输。在客户端和服务器端之间进行数据传输时,常常需要进行 JSON 格式的转换。接下来,我将为您提供一份详细的 JSON 客户端和服务器端的格式转换攻略。 JSON 格式转换 在进行 JSON 格式转换之前,我们首先需要了解两种形式的数据表示方法: JSON…

    JavaScript 2023年5月27日
    00
  • 跨平台移动WEB应用开发框架iMAG入门教程

    跨平台移动WEB应用开发框架iMAG入门教程 什么是iMAG iMAG是一款基于HTML5技术开发出的跨平台移动Web应用开发框架,它可以让开发者使用Web技术开发出安装在iOS、Android、Windows Phone等移动终端设备的应用。使用iMAG框架,开发者无需学习Objective-C、Java等编程语言,只需掌握HTML、CSS和JavaScr…

    JavaScript 2023年6月10日
    00
  • JavaScript中filter的用法实例分析

    我们来详细讲解一下“JavaScript中filter的用法实例分析”。 什么是filter? 在JavaScript中,filter()是Array对象的一个方法,它用于过滤数组中的元素,根据指定的条件筛选出符合条件的元素组成一个新数组并返回,原数组不会改变。 filter()方法接收一个函数作为参数,这个函数会被逐个考察数组中的元素,只有在符合特定条件时…

    JavaScript 2023年5月27日
    00
  • js自定义input文件上传样式

    下面是JS自定义input文件上传样式的完整攻略。我们可以通过JS代码来自定义input文件上传样式,从而提升用户体验。 创建文件上传按钮 我们可以通过HTML代码来创建文件上传按钮,如下所示: <input type="file" id="upload-file"> 隐藏默认文件上传按钮 当我们创建了文件…

    JavaScript 2023年6月10日
    00
  • js 用于检测类数组对象的函数方法

    检测类数组对象的函数方法主要用于确定一个对象是否具有数组的特性,例如可以迭代、可以使用数组的方法等等。下面是几种常见的用于检测类数组对象的函数方法: 1. 常规判断方法 可以通过判断对象是否具有“length”属性以及“splice”、“push”等数组方法来确定它是否为类数组对象。 function isArrayLike(obj) { return ob…

    JavaScript 2023年6月10日
    00
  • javascript制作loading动画效果 loading效果

    下面是“JavaScript制作loading动画效果”的攻略: JavaScript制作loading动画效果 1、为什么需要loading动画 网页中,加载耗时较久的资源,例如页面大图、视频等,会让用户感到等待时间较长,用户的耐心和积极性都可能因此受到影响,因此我们一般会在这些资源加载的过程中显示一个loading动画,以提醒用户内容正在加载中,并在用户…

    JavaScript 2023年6月10日
    00
  • JQuery验证jsp页面属性是否为空(实例代码)

    JQuery验证jsp页面属性是否为空是一个常见的需求,下面将给出一份完整的攻略。 步骤一:引入jQuery 在JSP页面中引入jQuery库,可以使用CDN或者本地引用。以下是本地引入的示例代码: <head> <script src="../jquery-3.6.0.min.js"></script&gt…

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