js实现简单div拖拽功能实例

下面是关于如何用 JavaScript 实现简单的 div 拖拽功能的攻略。

1. HTML 结构

首先,在 HTML 中需要先定义要拖拽的 div 元素,代码如下:

<div id="draggable">
  <!-- 这里可以放置需要拖拽的内容 -->
</div>

2. CSS 样式

接着,为这个 div 元素设置样式,使其能够被拖拽,代码如下:

#draggable {
  position: absolute;
  left: 0;
  top: 0;
  width: 100px;
  height: 100px;
  background-color: red;
  cursor: move;
}

关键点:position 属性需要设置为 absolute,同时为了能够通过 lefttop 移动元素,这两个属性应设置为 0

3. JavaScript 功能

最后,我们需要实现 div 拖拽的功能,代码如下:

var div = document.getElementById('draggable');
var dragging = false;
var offset = {x: 0, y: 0};

// 鼠标按下事件:记录位置和状态
div.addEventListener('mousedown', function(e) {
  offset.x = e.offsetX;
  offset.y = e.offsetY;
  dragging = true;
});

// 鼠标松开事件:更新状态
div.addEventListener('mouseup', function() {
  dragging = false;
});

// 鼠标移动事件:更新位置
document.addEventListener('mousemove', function(e) {
  if (dragging) {
    div.style.left = e.clientX - offset.x + 'px';
    div.style.top = e.clientY - offset.y + 'px';
  }
});

代码说明:

  1. 通过 document.getElementById() 获取到要拖拽的 div 元素
  2. 定义 draggingoffset 两个变量,分别表示是否被拖拽和元素的位置偏移量
  3. 监听鼠标按下事件,记录当前鼠标在 div 上的位置和状态,如果鼠标在 div 上按下,dragging 设置为 true
  4. 监听鼠标松开事件,如果鼠标在 div 上松开,dragging 设置为 false
  5. 监听鼠标移动事件,如果 draggingtrue,则根据鼠标在屏幕上的位置和偏移量计算出 div 的新位置,并更新其 lefttop 属性

4. 示例

下面是两个示例,分别演示了最基本的 div 拖拽和添加了限制范围的拖拽效果。

示例一:最基本的 div 拖拽

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>最基本的 div 拖拽</title>
  <style>
    #draggable {
      position: absolute;
      left: 0;
      top: 0;
      width: 100px;
      height: 100px;
      background-color: red;
      cursor: move;
    }
  </style>
</head>
<body>
  <div id="draggable"></div>
  <script>
    var div = document.getElementById('draggable');
    var dragging = false;
    var offset = {x: 0, y: 0};

    div.addEventListener('mousedown', function(e) {
      offset.x = e.offsetX;
      offset.y = e.offsetY;
      dragging = true;
    });

    div.addEventListener('mouseup', function() {
      dragging = false;
    });

    document.addEventListener('mousemove', function(e) {
      if (dragging) {
        div.style.left = e.clientX - offset.x + 'px';
        div.style.top = e.clientY - offset.y + 'px';
      }
    });
  </script>
</body>
</html>

示例二:限制拖拽范围

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>限制 div 拖拽范围</title>
  <style>
    body {
      margin: 0;
      padding: 0;
      height: 100vh;
    }

    #container {
      position: relative;
      height: 100%;
    }

    #draggable {
      position: absolute;
      left: 0;
      top: 0;
      width: 100px;
      height: 100px;
      background-color: red;
      cursor: move;
    }
  </style>
</head>
<body>
  <div id="container">
    <div id="draggable"></div>
  </div>
  <script>
    var container = document.getElementById('container');
    var div = document.getElementById('draggable');
    var dragging = false;
    var offset = {x: 0, y: 0};

    div.addEventListener('mousedown', function(e) {
      offset.x = e.offsetX;
      offset.y = e.offsetY;
      dragging = true;
    });

    div.addEventListener('mouseup', function() {
      dragging = false;
    });

    document.addEventListener('mousemove', function(e) {
      if (dragging) {
        var left = e.clientX - offset.x;
        var top = e.clientY - offset.y;
        var maxLeft = container.offsetWidth - div.offsetWidth;
        var maxTop = container.offsetHeight - div.offsetHeight;
        left = Math.min(Math.max(0, left), maxLeft);
        top = Math.min(Math.max(0, top), maxTop);
        div.style.left = left + 'px';
        div.style.top = top + 'px';
      }
    });
  </script>
</body>
</html>

代码说明:

示例二中,在 mousemove 事件中,使用 Math.min()Math.max() 方法处理 div 的位置,使其不能超出容器的范围。如果想要拖拽的 div 可以在整个页面内自由拖动,可以将容器的高度设置为 100vh

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现简单div拖拽功能实例 - Python技术站

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

相关文章

  • Vue transition过渡组件详解

    Vue transition过渡组件详解 Vue提供了过渡组件<transition>和<transition-group>,用于在元素插入或移出页面中时添加过渡效果。<transition>用于单个元素,<transition-group>用于多个相同类型的元素。这篇文章将详细讲解如何使用这两个组件,以及一些…

    css 2023年6月10日
    00
  • javascrip高级前端开发常用的几个API示例详解

    JavaScript 高级前端开发常用的几个 API 示例详解 在 JavaScript 高级前端开发中,经常会用到一些常见的 API。以下是其中一些 API 的示例及详解: 1. setTimeout() setTimeout() 函数用于在指定的毫秒数后执行一次函数。它的一般语法为: setTimeout(function, milliseconds);…

    css 2023年6月10日
    00
  • css简介_动力节点Java学院整理

    CSS简介 什么是CSS CSS(Cascading Style Sheets)即层叠样式表,是一种用于网页样式设计的语言。它通过描述HTML或者XML文档的外观来分离文档的内容和样式。CSS 使得你可以将文档结构和文档样式分开,从而更好地控制文档的渲染方式。 CSS的作用 CSS 能够实现动态样式设定,主要作用包括以下几点: 样式控制:CSS能够实现对网页…

    css 2023年6月9日
    00
  • 如何使用CSS sprites减少HTTP请求

    使用CSS Sprites技术可以减少网页的HTTP请求量,从而提高网页的加载速度,提升用户的体验感。 什么是CSS Sprites技术? CSS Sprites技术是一种将多张小图标合并为一张大图标,并通过CSS的background-position属性来实现只显示其中一部分的技术。使用CSS Sprites可以把多个小图标合并成一张大图标,这样就可以减…

    css 2023年6月11日
    00
  • 利用transform实现一个纯CSS弹出菜单的示例代码

    下面是详细的攻略: 利用transform实现纯CSS弹出菜单的原理 利用CSS3中的transform属性,可以对元素进行变形,其中包括旋转、缩放、平移等操作。通过利用这些变形,我们可以实现一些酷炫的效果,比如弹出菜单。 具体来说,我们可以利用transform的translate()方法让菜单动态地从原来的位置平移到目标位置,同时,利用transform…

    css 2023年6月10日
    00
  • jQuery判断div随滚动条滚动到一定位置后停止

    首先,我们需要了解一下jQuery中获取窗口滚动条位置的方法scrollTop(),它可以返回文档被卷起来的高度。 接下来,我们可以通过绑定窗口的scroll事件,来动态监听窗口的滚动事件,并在滚动到一定位置后停止对div的滚动事件进行监听。 以下是完整的代码实现: $(window).scroll(function() { var scrollTop = …

    css 2023年6月10日
    00
  • Vue el-table实现右键菜单功能

    下面我详细讲解一下“Vue el-table实现右键菜单功能”的完整攻略。 背景介绍 在Vue项目开发中,经常需要使用el-table来展示数据,如果需要实现右键菜单功能,该怎么做呢?本攻略将介绍如何使用Vue el-table和自定义指令来实现右键菜单功能。 准备工作 首先,我们需要安装element-ui组件库,并在Vue项目中引入它。具体引入方式可以参…

    css 2023年6月10日
    00
  • Community Server专题三:HttpModule

    让我来详细讲解一下“Community Server专题三:HttpModule”的完整攻略。 标题 1. 什么是HttpModule? HTTP模块(HttpModule)是用于扩展 ASP.NET Web 应用程序处理请求管道的一个组件。通过使用HTTP模块,您可以在请求处理期间介入请求管道,并检查或修改进入的请求、出站的响应或双方。HttpModule…

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