JavaScript 实现鼠标拖动元素实例代码

下面就给您详细讲解一下“JavaScript 实现鼠标拖动元素实例代码”的攻略。

什么是鼠标拖动元素

鼠标拖动元素是指利用鼠标对网页上的某个元素进行拖动操作,把元素从一个位置移到另一个位置。在前端开发中,鼠标拖动元素经常被用于实现拖拽排序、拖拽上传等功能。

实现鼠标拖动元素的基本步骤

实现鼠标拖动元素的基本步骤如下:

  1. 给需要拖动的元素添加鼠标按下的事件监听器mousedown,用于记录鼠标按下时的位置;
  2. 给文档添加鼠标移动的事件监听器mousemove,用于计算元素位移的距离;
  3. 给文档添加鼠标松开的事件监听器mouseup,用于取消拖动状态。

鼠标按下事件处理函数

下面是一个示例的鼠标按下事件处理函数代码:

let element = document.getElementById('element');

element.addEventListener('mousedown', function (event) {
  event.preventDefault();
  element.style.position = 'absolute';
  element.style.zIndex = 999;

  let startX = event.clientX;
  let startY = event.clientY;

  document.addEventListener('mousemove', handleMouseMove);
  document.addEventListener('mouseup', handleMouseUp);

  function handleMouseMove(event) {
    let deltaX = event.clientX - startX;
    let deltaY = event.clientY - startY;

    element.style.left = parseInt(element.style.left) + deltaX + 'px';
    element.style.top = parseInt(element.style.top) + deltaY + 'px';

    startX = event.clientX;
    startY = event.clientY;
  }

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

代码中,首先通过document.getElementById方法获得拖动的元素element,然后给element添加mousedown事件监听器,当鼠标按下时,函数会执行以下操作:

  1. 阻止默认的鼠标拖动事件;
  2. 把元素的position属性设置为absolute,用于设置元素的绝对定位;
  3. 把元素的zIndex属性设置为999,用于设置元素的堆叠顺序;
  4. 记录鼠标按下时的位置startXstartY
  5. document添加mousemove事件监听器handleMouseMovemouseup事件监听器handleMouseUp

鼠标移动事件处理函数

下面是一个示例的鼠标移动事件处理函数代码:

function handleMouseMove(event) {
  let deltaX = event.clientX - startX;
  let deltaY = event.clientY - startY;

  element.style.left = parseInt(element.style.left) + deltaX + 'px';
  element.style.top = parseInt(element.style.top) + deltaY + 'px';

  startX = event.clientX;
  startY = event.clientY;
}

代码中,当mousemove事件发生时,函数会执行以下操作:

  1. 计算鼠标的水平和垂直移动距离deltaXdeltaY
  2. 把元素的lefttop属性分别加上deltaXdeltaY的值,并附上px单位;
  3. 更新startXstartY,以记录当前的鼠标位置。

鼠标松开事件处理函数

下面是一个示例的鼠标松开事件处理函数代码:

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

代码中,当mouseup事件发生时,函数会移除documentmousemovemouseup事件监听器。

示例一

下面是一个基于jQuery实现鼠标拖动元素的例子。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery实现鼠标拖动元素实例代码</title>
</head>
<body>
  <div id="drag" class="drag">我可以拖动</div>

  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <script>
    $(document).ready(function() {
      let dragging = false;
      let target = null;
      let startX = 0;
      let startY = 0;

      $(document).on('mousedown', '.drag', function(e) {
        startX = e.pageX - $(this).offset().left;
        startY = e.pageY - $(this).offset().top;
        target = $(e.target);
        dragging = true;
      });

      $(document).on('mousemove', function(e) {
        if (dragging) {
          target.offset({
            top: e.pageY - startY,
            left: e.pageX - startX,
          });
        }
      });

      $(document).on('mouseup', function() {
        target = null;
        dragging = false;
      });
    });
  </script>
</body>
</html>

代码中,利用jQuery实现了鼠标按下、鼠标移动和鼠标松开事件的监听和处理。

示例二

下面是一个基于Vue.js实现鼠标拖动元素的例子。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Vue.js实现鼠标拖动元素实例代码</title>
</head>
<body>
  <div id="app">
    <div class="drag" :style="{top: position.y + 'px', left: position.x + 'px'}" @mousedown="handleMouseDown">
      我可以拖动
    </div>
  </div>

  <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
  <script>
    let app = new Vue({
      el: '#app',
      data: {
        dragging: false,
        startX: 0,
        startY: 0,
        position: {
          x: 0,
          y: 0
        }
      },
      methods: {
        handleMouseDown: function(e) {
          this.startX = e.pageX - this.position.x;
          this.startY = e.pageY - this.position.y;
          this.dragging = true;

          window.addEventListener('mousemove', this.handleMouseMove);
          window.addEventListener('mouseup', this.handleMouseUp);
        },
        handleMouseMove: function(e) {
          if (this.dragging) {
            this.position.x = e.pageX - this.startX;
            this.position.y = e.pageY - this.startY;
          }
        },
        handleMouseUp: function() {
          this.dragging = false;

          window.removeEventListener('mousemove', this.handleMouseMove);
          window.removeEventListener('mouseup', this.handleMouseUp);
        }
      }
    });
  </script>
</body>
</html>

代码中,利用Vue.js实现了鼠标按下、鼠标移动和鼠标松开事件的监听和处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript 实现鼠标拖动元素实例代码 - Python技术站

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

相关文章

  • Ruby on Rails中MVC结构的数据传递解析

    Ruby on Rails是一个基于MVC模式的Web应用程序框架,MVC即Model-View-Controller,其中模型层(Model)处理数据、控制器层(Controller)处理业务逻辑和请求、视图层(View)处理用户交互和展示。 在Ruby on Rails开发中,数据传递与解析是一个非常重要的过程。该过程通常要结合MVC模式一起使用。下面是…

    JavaScript 2023年6月10日
    00
  • 显示js对象所有属性和方法的函数

    要显示 JS 对象的所有属性和方法,需要使用以下两种方法之一。 方法一:for…in 循环 使用 for…in 循环可遍历该对象所有可枚举的属性名称,从而显示对象的属性和方法。 function showProperties(obj) { for (var propName in obj) { console.log(propName); } } 该…

    JavaScript 2023年5月27日
    00
  • 判断可拖动div是否重合 重合多少

    判断可拖动div是否重合,需要考虑以下几个步骤: 步骤一:确定两个div的位置、大小 判断两个div是否重合,首要条件是要获取它们的位置以及大小。可以通过jQuery中的offset和width/height方法获取其在页面上的位置和大小。例如: var $div1 = $("#div1"); var $div2 = $("#d…

    JavaScript 2023年6月11日
    00
  • Javascript 数组排序详解

    Javascript 数组排序详解 数组排序是JS中常用的操作之一,它可以对一个数组中的元素按照一定规则进行排序。本文将详细介绍JS中数组排序的各种方法和注意事项。 基本语法 JS中有多种数组排序方法,这些方法在使用时,可以通过以下语法进行调用: array.sort(function(a, b){return a-b}); 数组会根据 callback 函…

    JavaScript 2023年5月27日
    00
  • JavaScript将当前时间转换成UTC标准时间的方法

    JavaScript提供了多种方法将本地时间转换为UTC标准时间。本文将为你详细介绍一些最常用和最有效的方法。 方法1:使用Date对象的toUTCString()方法 使用Date对象的toUTCString()方法可以方便地将当前时间转换为UTC标准时间。 let d = new Date(); let utcString = d.toUTCString…

    JavaScript 2023年5月27日
    00
  • javascript中Function类型详解

    首先我们来讲解一下JavaScript中的函数类型。函数是JavaScript语言中非常重要的一种数据类型,它可以接收参数并返回值。在JavaScript中,函数也是一个对象类型,可以和其他对象(如字符串、数组等)一样,被创建、调用和销毁。 一、函数的声明与调用 1.1 函数的声明 在JavaScript中,可以使用函数声明的方式来创建一个函数。函数声明的语…

    JavaScript 2023年5月27日
    00
  • javascript实现点击星星小游戏

    实现点击星星小游戏是一项非常有趣的javascript编程任务,下面是一份简单的攻略。 步骤 在HTML页面中创建一个用于放置星星的容器div,并用CSS样式设置其宽度和高度。 <div id="star-container" style="width: 400px; height: 50px;"><…

    JavaScript 2023年6月11日
    00
  • 原生js操作checkbox用document.getElementById实现

    原生JS操作checkbox用document.getElementById实现的步骤如下: 1.在HTML页面中添加checkbox元素: <input type="checkbox" id="myCheckbox">My Checkbox</input> 2.在JS文件中使用document…

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