JavaScript 拖拽实现(附注释),最经典简单短小精悍!

以下是JavaScript拖拽实现的详细攻略:

概述

拖拽实现是网页中常见的交互效果,它的实现原理是借助JavaScript事件和DOM操作。本文将带您全面了解JavaScript拖拽的实现方法。

基本原理

拖拽实现的基本原理如下:

  1. 给需要拖拽的元素绑定mousedown事件。
  2. 鼠标按下时,记录鼠标相对元素位置,并给document绑定mousemove和mouseup事件。
  3. 鼠标移动时,计算元素新的位置,根据新位置重新设置元素的left和top值。
  4. 鼠标松开时,解除document的mousemove和mouseup事件绑定。

代码实现

以下是一份实现拖拽效果的代码:

// 获取需要拖拽的元素
var drag = document.getElementById("drag");

// 鼠标按下时记录鼠标相对元素位置
drag.onmousedown = function(e) {
  var disX = e.clientX - drag.offsetLeft;
  var disY = e.clientY - drag.offsetTop;

  // 绑定document的mousemove事件
  document.onmousemove = function(e) {
    // 计算元素新的位置
    var left = e.clientX - disX;
    var top = e.clientY - disY;

    // 重新设置元素位置
    drag.style.left = left + "px";
    drag.style.top = top + "px";
  };

  // 绑定document的mouseup事件
  document.onmouseup = function() {
    // 解除mousemove和mouseup事件绑定
    document.onmousemove = null;
    document.onmouseup = null;
  };
};

此代码实现了一个简单的拖拽效果,当鼠标按下需要拖拽的元素时,将元素的位置记录下来,并绑定document的mousemove和mouseup事件,当鼠标移动时,通过计算新的位置并设置元素的left和top值来实现拖拽效果。当鼠标松开时,解除document的mousemove和mouseup事件绑定。

示例说明

以下是两个示例,分别是实现可以拖动的按钮和拖动元素修改透明度的功能:

示例1:实现可以拖动的按钮

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>拖拽按钮</title>
  <style>
    #drag-btn {
      position: absolute;
      left: 100px;
      top: 100px;
      background-color: #f00;
      color: #fff;
    }
  </style>
</head>
<body>
  <button id="drag-btn">可以拖动的按钮</button>

  <script>
    var dragBtn = document.getElementById("drag-btn");

    dragBtn.onmousedown = function(e) {
      var disX = e.clientX - dragBtn.offsetLeft;
      var disY = e.clientY - dragBtn.offsetTop;

      document.onmousemove = function(e) {
        var left = e.clientX - disX;
        var top = e.clientY - disY;

        dragBtn.style.left = left + "px";
        dragBtn.style.top = top + "px";
      };

      document.onmouseup = function() {
        document.onmousemove = null;
        document.onmouseup = null;
      };
    };
  </script>
</body>
</html>

这个示例实现了一个可以拖拽的按钮,当鼠标按下时,可以拖拽按钮,并更新按钮的位置。

示例2:拖动元素修改透明度的功能

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>拖动修改透明度</title>
  <style>
    #drag-ele {
      position: absolute;
      left: 100px;
      top: 100px;
      background-color: #f00;
      width: 200px;
      height: 200px;
      opacity: 0.5;
    }
  </style>
</head>
<body>
  <div id="drag-ele"></div>

  <script>
    var dragEle = document.getElementById("drag-ele");
    var flag = false;

    dragEle.onmousedown = function(e) {
      flag = true;
      var disX = e.clientX - dragEle.offsetLeft;
      var disY = e.clientY - dragEle.offsetTop;

      document.onmousemove = function(e) {
        var left = e.clientX - disX;
        var top = e.clientY - disY;

        dragEle.style.left = left + "px";
        dragEle.style.top = top + "px";

        // 获取元素的当前位置
        var x = dragEle.offsetLeft;
        var y = dragEle.offsetTop;

        // 计算元素离页面顶部和左侧的距离
        var disTop = y;
        var disLeft = x;

        // 计算元素的总高度和总宽度
        var totalH = window.innerHeight;
        var totalW = window.innerWidth;

        // 计算元素离页面底部和右侧的距离
        var disBottom = totalH - y - dragEle.offsetHeight;
        var disRight = totalW - x - dragEle.offsetWidth;

        // 根据元素距顶部、左侧、右侧和底部的距离计算透明度
        var rate = (disTop + disLeft + disRight + disBottom) / (totalH + totalW);
        dragEle.style.opacity = rate.toFixed(2);
      };

      document.onmouseup = function() {
        document.onmousemove = null;
        document.onmouseup = null;
        flag = false;
      };
    };

    // 停止鼠标拖动时,如果元素不在可视区域内,即flag为false时,清除document的mousemove和mouseup事件绑定
    document.onmousemove = function(e) {
      if (!flag) {
        document.onmousemove = null;
        document.onmouseup = null;
      }
    };
  </script>
</body>
</html>

这个示例实现了一个拖动元素透明度发生变化的功能,当鼠标按下时,可以拖动元素,并且根据元素离顶部、左侧、右侧和底部的距离计算元素的透明度,并更新元素的位置和透明度。

以上就是JavaScript拖拽实现的完整攻略,希望对您有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript 拖拽实现(附注释),最经典简单短小精悍! - Python技术站

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

相关文章

  • 深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解

    深入Javascript函数、递归与闭包是Javascript重要概念之一,理解这些概念可以帮助我们编写更加高效、优美的代码。 执行环境(Execution Context) 在Javascript中,当代码执行时,在内存中会依次创建执行上下文,也就是执行环境(Execution Context)。一个执行环境包含三个重要的属性: 变量对象(Variable…

    JavaScript 2023年6月10日
    00
  • JavaScript中exec函数用法实例分析

    JavaScript中exec函数用法实例分析 介绍 exec 方法是 JavaScript 正则表达式对象的一个方法,用于在字符串中查找指定的正则表达式,并返回匹配结果。 该方法返回一个数组,数组的第一个元素是匹配到的字符串,后面的元素则是与正则表达式的每个括号匹配的子字符的数组。如果没有匹配到,则返回 null。 在本篇文章中,我们将通过两个例子来一步步…

    JavaScript 2023年6月10日
    00
  • JavaScript面向对象实现贪吃蛇游戏

    JavaScript面向对象实现贪吃蛇游戏的步骤如下: 定义Snake类 Snake类表示贪吃蛇,包含以下属性: body:表示蛇身,由一个包含多个坐标的数组组成 direction:表示蛇的方向,可以取值为”up”、”down”、”left”、”right”之一 Snake类包含以下方法: move():根据方向移动蛇的位置,并更新蛇的身体 changeD…

    JavaScript 2023年6月10日
    00
  • Xterm.js入门官方文档示例详解

    下面是对Xterm.js入门官方文档示例进行详细讲解的攻略。 Xterm.js简介 Xterm.js是基于Web技术栈实现的终端模拟器。它可以在网页中实现真正的终端体验,包括字符输入、光标移动、控制台输出等等。Xterm.js不仅支持基本的字符操作,还支持ANSI控制代码,允许在终端中显示颜色、样式和图像等内容。 Xterm.js官方文档示例 Xterm.j…

    JavaScript 2023年6月11日
    00
  • JS Array创建及concat()split()slice()的使用方法

    JS Array创建及concat()split()slice()的使用方法 1. JS Array创建 JS中创建数组有两种方式:使用数组字面量和使用Array 构造函数。下面是两种方式的定义方法。 1.1 使用数组字面量: var fruits = ["apple", "banana", "orange&…

    JavaScript 2023年5月27日
    00
  • JavaScript数据类型的存储方法详解

    JavaScript数据类型的存储方法详解 1. JavaScript数据类型简介 在JavaScript中,共有以下七种数据类型: 原始类型:Number、String、Boolean、null、undefined、Symbol 引用类型:Object 2. 数据类型的存储方式 2.1 原始类型的存储方式 原始类型的数据直接存储在栈内存中,它们的值可以直接…

    JavaScript 2023年6月11日
    00
  • uniapp定义动画的几种方式总结

    下面我会详细讲解“uniapp定义动画的几种方式总结”的完整攻略。 uniapp定义动画的几种方式总结 uniapp是一种基于Vue.js开发的跨平台框架,通过uniapp,我们可以轻松地开发出同时支持安卓和iOS的应用程序。在uniapp中定义动画,一般可以通过以下几种方式: 1. 使用CSS动画 在uniapp中,我们可以使用CSS动画来定义动画效果。具…

    JavaScript 2023年6月11日
    00
  • Javascript创建自定义对象 创建Object实例添加属性和方法

    下面是“Javascript创建自定义对象 创建Object实例添加属性和方法”的完整攻略。 创建自定义对象 在Javascript中,可以通过构造函数创建自定义对象。它是一种特殊的函数,可以用来创建具有特定属性和方法的对象。以下是创建自定义对象的示例代码: function Person(name, age) { this.name = name; thi…

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