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

yizhihongxing

下面就给您详细讲解一下“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日

相关文章

  • 如何使用JavaScript快速创建一个1到100的数组

    下面是使用JavaScript快速创建1到100的数组的攻略: 1. 使用for循环快速创建一个1到100的数组 // 创建一个长度为 100 的数组 var arr = new Array(100); for (var i = 0; i < arr.length; i++) { // 把数组的每个元素赋值为它的下标+1 arr[i] = i + 1;…

    JavaScript 2023年5月27日
    00
  • javascript使用btoa和atob来进行Base64转码和解码

    JavaScript中使用btoa()和atob()可以进行Base64编码和解码。Base64编码是将二进制数据编码成ASCII字符串的过程,解码则是将已编码的ASCII字符串还原为原始的二进制数据。 btoa()方法 btoa()方法可以将一个字符串进行Base64编码。 语法 string btoa(string) 参数 string: 待编码的字符串…

    JavaScript 2023年5月19日
    00
  • 详解js创建对象的几种方式和对象方法

    详解JS创建对象的几种方式 在JS中,创建对象的方式有多种,我们将分别介绍它们的特点和使用情况。 对象字面量 对象字面量是最常用的创建对象的方式,它使用花括号{}包裹,其中包含多个键值对,每个键值对之间使用逗号分隔。 const person = { name: ‘Jack’, age: 20, sayHi: function(){ console.log(…

    JavaScript 2023年5月27日
    00
  • Javascript Date getUTCMonth() 方法

    JavaScript 中的 getUTCMonth() 方法用于获取 UTC 时间的月份部分。在本教程中,我们将详细介绍 getUTCMonth() 方法的使用方法。 getUTCMonth() 方法的基本语法如下: date.getUTCMonth() 其中,date 是获取月份部分的 UTC 日期对象。 以下两个示例说明: 示例一:使用 getUTCMo…

    JavaScript 2023年5月11日
    00
  • JavaScript 对象的四种方式比较详解

    JavaScript对象的四种方式比较详解 在JavaScript中,对象是一种非常重要的数据类型。对象采用键值对的方式存储数据,并且可以嵌套使用。在JavaScript中,有四种不同的创建对象的方法:字面量方式、工厂方式、构造函数方式、原型方式。本文将详细讲解这四种方式的使用方法、优缺点以及适用场景。 字面量方式 字面量方式是JavaScript中最常用的…

    JavaScript 2023年5月27日
    00
  • js实现精确到毫秒的倒计时效果

    实现精确到毫秒的倒计时效果一般可以通过以下步骤完成: 获取两个日期之间的时间差:当前时间和目标时间(倒计时结束时间)。 将时间差转换成需要展示的格式:天、时、分、秒、毫秒。 更新时间差并展示倒计时效果。可以使用定时器 setInterval 或 requestAnimationFrame 实现倒计时的更新。 下面是具体步骤的示例代码: 步骤一:获取时间差 c…

    JavaScript 2023年5月27日
    00
  • JavaScript使用RegExp进行正则匹配的方法

    下面是详细讲解“JavaScript使用RegExp进行正则匹配的方法”的完整攻略。 1. 正则表达式简介 正则表达式(RegExp)是一种描述字符串规律的方法,可以用于验证、查找、替换等操作。在JavaScript中,正则表达式通过RegExp类进行定义和使用。 正则表达式由若干个字符和特殊符号组成,可以使用多种方式进行匹配和替换。下面是一些常见的正则表达…

    JavaScript 2023年6月10日
    00
  • JavaScript中的this关键词指向

    JavaScript中this关键词指向是一个常被提及并且也容易出错的概念,仔细理解和学习会让我们在编写JavaScript代码时更加自如。下面就是详细的攻略。 什么是this 在JavaScript中,this是一个关键词,它指向了当前执行上下文中的一个对象。当前执行上下文可能是全局环境,也可能是某个函数的调用环境。 this的指向 在JavaScript…

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