JS实现的简单拖拽功能示例

下面是JS实现的简单拖拽功能示例的完整攻略:

一、准备工作

在HTML文档中添加一个元素,我们称之为“拖拽元素”,该元素将被用户用鼠标拖动。

<div id="drag">拖拽我</div>

二、绑定事件

为了使用户能够拖动该元素,我们需要将拖拽元素上的鼠标事件绑定到JavaScript函数。

const drag = document.getElementById('drag');
let isDragging = false;
let dragStartX, dragStartY;
let currentX, currentY;

drag.addEventListener('mousedown', dragStart);
drag.addEventListener('mousemove', dragMove);
drag.addEventListener('mouseup', dragEnd);

function dragStart(e) {
  isDragging = true;
  dragStartX = e.clientX - drag.offsetLeft;
  dragStartY = e.clientY - drag.offsetTop;
}

function dragMove(e) {
  if (isDragging) {
    currentX = e.clientX - dragStartX;
    currentY = e.clientY - dragStartY;

    drag.style.left = `${currentX}px`;
    drag.style.top = `${currentY}px`;
  }
}

function dragEnd() {
  isDragging = false;
}

这里我们绑定了三个事件:mousedownmousemovemouseup

mousedown事件发生在用户点击鼠标按钮的时候。在我们的示例中,这是拖拽操作的起点。mousemove事件发生在用户移动鼠标,并且正在拖拽元素的时候。这里我们将元素的位置设置为鼠标光标的位置。mouseup事件发生在用户松开鼠标按钮并完成拖拽操作的时候。

三、添加样式

为了让拖拽元素看起来更美观,我们可以添加一些CSS样式。

#drag {
  position: absolute;
  top: 100px;
  left: 100px;
  width: 100px;
  height: 100px;
  background-color: #ff0000;
  color: #ffffff;
  text-align: center;
  line-height: 100px;
  cursor: move;
}

在这个示例中,我们将#drag元素的位置设置为绝对定位,使其能够被拖拽。我们还设置了元素的宽度、高度、背景颜色、文本颜色、文本对齐和光标类型。

四、完整示例

接下来,我们将上述代码组装起来,形成一个完整的示例。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>JS实现的简单拖拽功能示例</title>
    <style>
      #drag {
        position: absolute;
        top: 100px;
        left: 100px;
        width: 100px;
        height: 100px;
        background-color: #ff0000;
        color: #ffffff;
        text-align: center;
        line-height: 100px;
        cursor: move;
      }
    </style>
  </head>
  <body>
    <div id="drag">拖拽我</div>
    <script>
      const drag = document.getElementById('drag');
      let isDragging = false;
      let dragStartX, dragStartY;
      let currentX, currentY;

      drag.addEventListener('mousedown', dragStart);
      drag.addEventListener('mousemove', dragMove);
      drag.addEventListener('mouseup', dragEnd);

      function dragStart(e) {
        isDragging = true;
        dragStartX = e.clientX - drag.offsetLeft;
        dragStartY = e.clientY - drag.offsetTop;
      }

      function dragMove(e) {
        if (isDragging) {
          currentX = e.clientX - dragStartX;
          currentY = e.clientY - dragStartY;

          drag.style.left = `${currentX}px`;
          drag.style.top = `${currentY}px`;
        }
      }

      function dragEnd() {
        isDragging = false;
      }
    </script>
  </body>
</html>

五、示例说明

示例一

我们可以将上述示例修改一下,以实现多个拖拽元素的拖拽功能。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>JS实现的简单拖拽功能示例</title>
    <style>
      .drag {
        position: absolute;
        top: 100px;
        left: 100px;
        width: 100px;
        height: 100px;
        background-color: #ff0000;
        color: #ffffff;
        text-align: center;
        line-height: 100px;
        cursor: move;
      }
    </style>
  </head>
  <body>
    <div class="drag">拖拽我</div>
    <div class="drag">拖拽我</div>
    <script>
      const dragElements = document.querySelectorAll('.drag');
      let isDragging = false;
      let dragStartX, dragStartY;
      let currentX, currentY;

      dragElements.forEach(dragElement => {
        dragElement.addEventListener('mousedown', dragStart);
        dragElement.addEventListener('mousemove', dragMove);
        dragElement.addEventListener('mouseup', dragEnd);
      });

      function dragStart(e) {
        isDragging = true;
        dragStartX = e.clientX - this.offsetLeft;
        dragStartY = e.clientY - this.offsetTop;
      }

      function dragMove(e) {
        if (isDragging) {
          currentX = e.clientX - dragStartX;
          currentY = e.clientY - dragStartY;

          this.style.left = `${currentX}px`;
          this.style.top = `${currentY}px`;
        }
      }

      function dragEnd() {
        isDragging = false;
      }
    </script>
  </body>
</html>

在这个示例中,我们给所有拖拽元素添加了相同的类名,并使用querySelectorAll获取它们。我们还修改了元素的类选择器,将其设置为.drag。最后,我们将事件监听器绑定到每个拖拽元素上。

示例二

我们也可以使用event.target属性来获取拖拽元素。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>JS实现的简单拖拽功能示例</title>
    <style>
      .drag {
        position: absolute;
        top: 100px;
        left: 100px;
        width: 100px;
        height: 100px;
        background-color: #ff0000;
        color: #ffffff;
        text-align: center;
        line-height: 100px;
        cursor: move;
      }
    </style>
  </head>
  <body>
    <div class="drag">拖拽我</div>
    <div class="drag">拖拽我</div>
    <script>
      const container = document.body;
      let isDragging = false;
      let dragElement = null;
      let dragStartX, dragStartY;
      let currentX, currentY;

      container.addEventListener('mousedown', dragStart);
      container.addEventListener('mousemove', dragMove);
      container.addEventListener('mouseup', dragEnd);

      function dragStart(e) {
        if (e.target.classList.contains('drag')) {
          isDragging = true;
          dragElement = e.target;
          dragStartX = e.clientX - dragElement.offsetLeft;
          dragStartY = e.clientY - dragElement.offsetTop;
        }
      }

      function dragMove(e) {
        if (isDragging) {
          currentX = e.clientX - dragStartX;
          currentY = e.clientY - dragStartY;

          dragElement.style.left = `${currentX}px`;
          dragElement.style.top = `${currentY}px`;
        }
      }

      function dragEnd() {
        isDragging = false;
        dragElement = null;
      }
    </script>
  </body>
</html>

在这个示例中,我们使用了一个更通用的事件绑定方法。我们将所有事件绑定到文档的根元素上,并使用event.target属性来获取拖拽元素。这样,在用户点击和拖拽元素的过程中,不必严格限制鼠标的移动范围。同时,我们将所需的状态存储在全局变量中,以允许多个拖拽元素在同一时间进行拖拽操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现的简单拖拽功能示例 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQuery UI的Draggable disabled()方法

    以下是关于 jQuery UI 的 Draggable disabled() 方法的详细攻略: jQuery UI 的 Draggable disabled() 方法 jQuery UI 的 Draggable disabled() 方法用于禁用或启用拖动元素。该方法可以通过 jQuery draggable() 方法调用。 语法 $( ".sel…

    jquery 2023年5月11日
    00
  • jquery使用EasyUI Tree异步加载JSON数据(生成树)

    好的。首先需要说明的是,jQuery EasyUI是一个基于jQuery的开源UI库,提供了各种易于操作的UI组件,其中包括Tree组件。Tree组件可以用于生成树形结构,并支持异步加载JSON数据。下面是使用EasyUI Tree异步加载JSON数据(生成树)的完整攻略。 1. 引入EasyUI库 首先需要在HTML页面中引入jQuery和EasyUI库。…

    jquery 2023年5月28日
    00
  • 如何在jQuery的点击事件中运行代码

    在jQuery中,可以使用click()方法将代码绑定到元素的点击事件上。以下是如何在jQuery的点击事件中运行代码的完整攻略: 步骤一:选择元素 首先,需要选择要绑定点击事件的元素。可以使用选择器选择元素。以下是一个示例: // Select element to bind the click event to using jQuery var myEl…

    jquery 2023年5月9日
    00
  • jQWidgets jqxGrid setcellvalue()方法

    以下是关于“jQWidgets jqxGrid setcellvalue()方法”的完整攻略,包含两个示例说明: 方法简介 setcellvalue(row, datafield, value) 方法是 jQWidgets jqxGrid 控件的一个方法,用于指定单元格的值。该方法的语法如下: $("#jqxGrid").jqxGrid(…

    jquery 2023年5月10日
    00
  • jQWidgets jqxNotification animationCloseDelay属性

    以下是关于 jQWidgets jqxNotification 组件中 animationCloseDelay 属性的详细攻略。 jQWidgets jqxNotification animationCloseDelay 属性 jQWidgets jqxNotification 的 animationDelay 属性用于设置通知组件关闭动画的延迟时间。 语法…

    jquery 2023年5月12日
    00
  • jQuery :file选择器

    以下是关于jQuery中的:file选择器的完整攻略: 什么是jQuery中的:file选择器? jQuery中的:file选择器是一种用于选择所有文件上传元素的语法。使用这个选择器可以轻松选择所有文件上传元素对其进行操作。 如何使用jQuery中的:file选择器? 可以使用以下代码来选择所有文件上传元素: $(":file") 在这个…

    jquery 2023年5月12日
    00
  • 用Jquery选择器计算table中的某一列某一行的合计

    下面是用Jquery选择器计算table中的某一列某一行的合计攻略,分为以下几步: 1. 获取table 首先,需要通过相应的选择器获取到需要计算的table,比如下面的示例: var table = $(‘table’); 2. 获取表头 因为需要找到要计算的列的位置,所以需要获取table的表头,并将其转化为数组,方便获取每一列的位置,示例如下: var…

    jquery 2023年5月27日
    00
  • jQuery调用Webservice传递json数组的方法

    关于”jQuery调用Webservice传递json数组的方法”的完整攻略,我可以提供以下流程: 1. 定义Webservice 首先,我们需要定义一个Web Service,用于接收并处理来自客户端的JSON数组。Web Service可以使用各种不同的技术实现,但这里我们以ASP.NET Web Service为例。 [WebService(Names…

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