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日

相关文章

  • 利用JS实现AI自动玩贪吃蛇

    实现AI自动玩贪吃蛇的具体步骤一般包括以下几个部分: 1. 实现贪吃蛇游戏逻辑 首先,需要实现贪吃蛇游戏的基本逻辑,包括蛇的移动、食物生成、吃食物、增长等功能。这部分的代码实现方式可以参考一些贪吃蛇游戏的教程和示例代码,例如利用canvas绘制贪吃蛇游戏界面及游戏逻辑等。具体实现方法可以参考下面的示例: // 初始化贪吃蛇游戏界面 var canvas = …

    JavaScript 2023年6月10日
    00
  • php json中文编码为null的解决办法

    下面是详细的讲解: 问题描述 在PHP中,对于中文编码的JSON数据,在进行json_encode()时可能会出现某些中文字符串被编码为null的情况,这会导致JSON数据无法正常解析。如何解决这个问题呢? 解决办法 指定json_encode()函数的选项参数 我们可以在json_encode()函数的第二个参数中设置选项参数,如下所示: $data = …

    JavaScript 2023年6月1日
    00
  • javascript 在网页中的运用(asp.net)

    JavaScript 在网页中的运用 (ASP.NET) JavaScript 是一门嵌入到网页中的脚本语言,能够使网页具有更加生动、交互性更强的功能。在 ASP.NET 中,我们可以使用内置的 ScriptManager 控件来管理 JavaScript。 添加 ScriptManager 首先,我们需要添加 ScriptManager 到我们的页面中。S…

    JavaScript 2023年6月10日
    00
  • JavaScript中import用法总结

    一、介绍 在现代JavaScript中,由于前后端的合并,前端框架和库变得更加流行。尤其是React、Vue、Angular等框架的引入,对项目的开发有非常大的帮助作用,更可以提高项目的开发效率,简化了开发流程。为了使这些框架和库能够生效,我们需要使用ES6模块加载系统。import和export是ES6中原生导入/导出模块的语法,这种语法可以让我们从其他模…

    JavaScript 2023年6月11日
    00
  • Javascript类型判断相关例题及解析

    Javascript类型判断相关例题及解析 前言 在Javascript编程中,进行类型判断十分常见。需要熟悉Javascript中数据类型、类型判断方法以及常见类型判断例题的解析。在本篇文章中,我们将结合实例,深入分析Javascript中类型判断的相关知识点。 数据类型 Javascript中的数据类型分为基本数据类型和引用数据类型。 基本数据类型 Ja…

    JavaScript 2023年6月10日
    00
  • js调用AJAX时Get和post的乱码解决方法

    这里是 “js调用AJAX时Get和post的乱码解决方法”的完整攻略,我们将分为以下几个步骤: 确认乱码问题 解决Get请求的乱码问题 解决Post请求的乱码问题 接下来详细讲解: 1. 确认乱码问题 首先在实际开发时遇到乱码问题时,需要确认到底是AJAX请求出现了乱码,还是服务器返回了乱码,这是解决问题的第一步。 可以通过Chrome浏览器的开发者工具,…

    JavaScript 2023年5月19日
    00
  • 详解前端安全之JavaScript防http劫持与XSS

    首先,需要明确的是前端安全是一个非常重要的主题。在网络环境日趋复杂的今天,安全问题已经不再是一个简单的概念,而是涉及到许多方面,包括网络攻击、数据泄露、信息窃取等。因此,在开发网站时,需要重视前端安全,采取相应的措施,以保障网站和用户的安全。 其中一项非常重要的前端安全技术就是防止http劫持和XSS攻击。http劫持指的是黑客通过某些手段,劫持用户的请求,…

    JavaScript 2023年6月10日
    00
  • JS数学函数Exp使用说明

    JS数学函数Exp使用说明 简介 Exp()函数是JavaScript中的一个数学函数,也称为指数函数或自然对数函数。它的主要作用是计算以自然常数e为底数的指数函数。 在数学上,自然常数e是一个重要的常数,它的值是约等于2.71828的无限不循环小数。指数函数y=e^x是一个与其它常见数学函数如幂函数、指数函数和对数函数等同样重要的函数。 语法 Math.e…

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