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日

相关文章

  • JavaScript实现公告栏上下滚动效果

    下面是详细讲解“JavaScript实现公告栏上下滚动效果”的完整攻略。 概述 公告栏上下滚动效果是一个常见的网页特效,可以通过JavaScript实现。具体来说,当一组公告内容超出公告栏的显示范围时,可以让公告内容向上或向下滚动,以便显示所有内容。实现这一效果需要用到JavaScript的定时器、DOM操作、CSS样式等知识点。 实现步骤 下面介绍实现公告…

    JavaScript 2023年6月11日
    00
  • JavaScript 对象模型 执行模型

    我来讲解一下 JavaScript 对象模型和执行模型。 JavaScript 对象模型 JavaScript 对象模型(Document Object Model,简称 DOM)是一种表现 HTML 或 XML 文档的方式,它将文档作为节点树表示。每个节点都是一个对象,由此可得到 DOM 中体现的是一种父子关系。在 JavaScript 中,可以通过访问 …

    JavaScript 2023年5月27日
    00
  • Bootstrap轮播加上css3动画,炫酷到底!

    下面是关于“Bootstrap轮播加上css3动画,炫酷到底!”的完整攻略。 1. 准备工作 首先,在使用Bootstrap轮播加上css3动画之前,你需要先做好一些准备工作,包括: 在你的HTML文件中引入Bootstrap的CSS和JavaScript文件。 创建轮播的HTML结构。 为轮播添加必要的样式。 如果你对以上准备工作有疑问,可以参考Boots…

    JavaScript 2023年6月10日
    00
  • JavaScript中的闭包

    JavaScript中的闭包是一个非常重要的概念,也是比较难以理解的一个部分。在理解闭包之前,首先需要明确以下几个概念: 变量作用域(Scope),指一个变量可以被访问的区域。 函数作用域(Function scope),指函数内部定义的所有变量在函数外部都是不可访问的。 作用域链(Scope chain),指当一个函数被调用时,JavaScript引擎会去…

    JavaScript 2023年6月10日
    00
  • JavaScript 防抖和节流详解

    JavaScript 防抖和节流详解 前言 在 JavaScript 开发中,我们经常会遇到一些高频触发的事件,如 resize、scroll、input等,这些事件在触发时由于其高频次和高并发性,往往会造成网页的性能问题,影响用户体验。所以我们需要一些手段来限制这些事件的触发次数、缩短响应间隔,以避免过度渲染,浪费资源等性能问题。 常见的限制高频触发的方法…

    JavaScript 2023年6月10日
    00
  • 总结Node.js中的一些错误类型

    下面是关于总结Node.js中的一些错误类型的完整攻略: 错误类型 在Node.js使用过程中,我们会遇到多种错误类型,下面是一些常见的错误类型。 SyntaxError SyntaxError 是在JavaScript代码解析过程中发现的语法错误。通常,这种错误是因为代码中有一个或多个拼写错误或语法错误导致的。例如: if (mood === "…

    JavaScript 2023年5月28日
    00
  • JavaScript基础重点(必看)

    JavaScript基础重点(必看) JavaScript是一种用于网页开发的脚本语言,广泛应用于前端开发中,熟练掌握JavaScript基础是成为一名优秀的前端开发工程师的必要条件。 本篇攻略旨在讲解JavaScript的基础重点,包括基本语法、变量、数据类型、运算符、流程控制以及函数等知识点。下面是详细的讲解。 基本语法 JavaScript中的基本语法…

    JavaScript 2023年5月17日
    00
  • 如何使用JS获取IE上传文件路径(IE7,8)

    当使用Internet Explorer 7或8时,我们可以使用JavaScript获取上传文件的完整路径。这种方法针对IE浏览器而言,Chrome、Firefox、Edge和Safari等浏览器不支持。以下是如何使用JS获取IE上传文件路径的完整攻略: 方法一:利用ActiveX对象 在IE浏览器中使用ActiveX对象可以实现获取IE上传文件路径的功能,…

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