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

yizhihongxing

以下是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日

相关文章

  • js友好的时间返回函数

    下面我将详细讲解如何编写一个JS友好的时间返回函数: 什么是JS友好的时间返回函数? JS友好的时间返回函数是指能够将时间戳或者日期字符串转换为易于阅读的人类可读格式的JavaScript函数。比如将日期字符串”2019-08-01T12:00:00.000Z”转换为”2019年8月1日12点”这样的格式。 编写JS友好的时间返回函数 从时间戳转换为人类可读…

    JavaScript 2023年5月27日
    00
  • js与C#进行时间戳转换

    当我们需要在前端应用中与后端应用进行通信时,常常需要用到时间戳。因为各种编程语言对时间的处理方式不同,所以在不同编程语言之间进行通信时需要进行一些数据格式的转换。下面我会提供一些将 JS 时间戳转换成 C# 时间戳的方法和示例。 JS 时间戳转 C# 时间戳格式 JS 中获取时间戳的方式很简单,可以使用 Date.now() 或 new Date().get…

    JavaScript 2023年5月27日
    00
  • js获取指定时间的前几秒

    获取指定时间的前几秒,可以使用JavaScript中的Date对象,以下是获取前5秒的代码示例: var date = new Date(‘2022-01-01 12:00:00’); var beforeDate = new Date(date.getTime() – 5 * 1000); // getTime()方法获取时间戳,单位为毫秒 console…

    JavaScript 2023年5月27日
    00
  • JavaScript 数据类型详解

    JavaScript 数据类型详解 简介 JavaScript 是一种弱类型、动态类型的编程语言,数据类型非常多样化。本文将从基本数据类型、对象类型和特殊数据类型三个方面详细介绍 JavaScript 中的数据类型。 基本数据类型 数值型(Number) 数值型是 JavaScript 中最基本的数据类型。它可以表示整数和浮点数。JavaScript 使用 …

    JavaScript 2023年5月17日
    00
  • 基于JavaScript中字符串的match与replace方法(详解)

    基于JavaScript中字符串的match与replace方法(详解) 1. match方法 match 方法用于在字符串中查找一个或多个匹配正则表达式的字串。 1.1 方法语法 string.match(regexp); 1.2 方法参数 regexp参数是一个正则表达式对象。如果传入的参数不是正则表达式对象,将被自动转换为正则表达式对象。 1.3 方法…

    JavaScript 2023年5月28日
    00
  • 原生js的ajax和解决跨域的jsonp(实例讲解)

    关于原生JS的AJAX和JSONP的介绍和实例讲解,我将从以下三个部分来进行详细解答。 AJAX的介绍和使用方法 AJAX全称为Asynchronous JavaScript and XML(异步的JavaScript和XML),是一种前端常用数据交换技术,能够实现页面异步刷新,避免了页面重新刷新的效果,减轻服务器对请求的压力。使用AJAX技术可以更好的优化…

    JavaScript 2023年5月27日
    00
  • JavaScript必知必会(九)function 说起 闭包问题

    下面是我对“JavaScript必知必会(九)function 说起 闭包问题”的完整攻略。 什么是闭包 闭包是指函数和函数所能访问的外部变量之间的关系。可以理解为,一个函数能够“记住”在它被定义时所处的环境。 一个闭包的形成,需要满足以下条件: 函数嵌套:在一个函数内定义了另一个函数。 内层函数使用了外部变量:内层函数使用了外部函数所定义的变量。 外部函数…

    JavaScript 2023年6月10日
    00
  • JS实现表单中点击小眼睛显示隐藏密码框中的密码

    当用户在表单中输入密码时,通常会提供一个“显示密码”的选项,这使得用户可以查看其输入的密码而不必担心输错。下面是一些使用JavaScript实现显示密码选项的攻略。 第一步:HTML结构 首先,我们需要创建一个包含密码和复选框的HTML结构。在密码输入框后面放置一个复选框,在复选框后面标注“显示密码”。以下是HTML代码示例: <label> P…

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