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 Spinner最大选项

    以下是关于 jQuery UI Spinner 最大选项的详细攻略: jQuery UI Spinner 最大选项 可以使用 max 选项来设置 Spinner 控件的最大值。将限制用户输入的值不能超过大值。 语法 $( ".selector" ).spinner({ max: 100 }); 示例一:设置 Spinner 控件的最大值 …

    jquery 2023年5月11日
    00
  • Jquery实现异步上传文件

    下面是详细的“Jquery实现异步上传文件”的攻略过程。 1. 异步上传需要用到的工具 要实现异步上传文件,我们需要使用到以下工具和技术: Jquery库:异步上传文件需要借助AJAX的技术,Jquery是常用的AJAX库之一。 FormData对象:它可以直接用于构建表单数据,特别是在上传二进制文件的时候。 XMLHttpRequest对象:XHR对象可以…

    jquery 2023年5月27日
    00
  • jQuery选择器实例应用

    jQuery选择器实例应用 jQuery是一个广泛应用于前端开发的JavaScript库,它提供了丰富的选择器,并且使用也非常方便。在本文中,我们将讨论如何使用jQuery选择器实现不同的功能。 1. 基本语法 使用jQuery选择器的基本语法如下: $(selector).action() 其中,$符号用于定义jQuery,selector是元素的标识符,…

    jquery 2023年5月28日
    00
  • jquery的$().each和$.each的区别

    jQuery是一个基于JavaScript的框架,提供了非常方便的方法来操作DOM和处理事件。在jQuery中,$符号是一个别名,它用来简化JavaScript操作DOM的语法。其中,$().each和$.each都是jQuery提供的遍历方法,但它们有着不同的用法和作用。 $().each的用法和作用 $().each方法的作用是遍历一个jQuery对象,…

    jquery 2023年5月28日
    00
  • Javascript 颜色渐变效果的实现代码

    Javascript 颜色渐变效果的实现代码,主要需要考虑两个方面,一是颜色值的计算,二是颜色的渐变效果展示。下面我将从这两个方面展开来详细讲解实现过程。 颜色值的计算 颜色值的计算,即如何在颜色值之间进行插值计算,从而得到渐变颜色值。 颜色的表示 在Javascript中,颜色主要有两种表示方式,一是十六进制值,二是rgb格式。 十六进制值表示 十六进制值…

    jquery 2023年5月27日
    00
  • jQuery fadeTo()方法

    jQuery fadeTo()方法是一个用于渐变元素透明度至指定值的方法。该方法包含两个参数:speed和opacity。Speed参数用于指定渐变的速度,单位为毫秒;opacity参数用于指定透明度的值,取值范围为0到1,0为完全透明,1为完全不透明。 使用方法: $(selector).fadeTo(speed, opacity); 其中,selecto…

    jquery 2023年5月12日
    00
  • jQWidgets jqxTreeGrid getRows()方法

    以下是关于 jQWidgets jqxTreeGrid 组件中 getRows() 方法的详细攻略。 jQWidgets jqxTreeGrid getRows() 方法 jQWidgets jqxTreeGrid 的 getRows() 方法用于获取所有行的对象数组。您可以使用此方法来获取所有行的对象,以便更好地操作和管理数据。 语法 var rows =…

    jquery 2023年5月12日
    00
  • 如何使用jQuery找到所有具有指定类别的孩子

    要使用jQuery找到所有具有指定类别的孩子,我们可以使用以下步骤: 使用$(“.parent-class”)选择器选择具有指定类别的父元素。 使用.find(“.child-class”)函数查找所有具有指定类别的孩子元素。 以下是两个示例,演示如何使用jQuery找到所有具有指定类别的孩子: 示例1:查找所有具有指定类别的孩子 以下是一个示例,演示如何使…

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