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日

相关文章

  • 一张图看懂移动HTML5前端性能优化

    一张图看懂移动 HTML5 前端性能优化是一张概述和总结了移动端 HTML5 前端性能优化的思维导图,且很好地概括了优化步骤以及对应的各项技巧细节。在图上可以看到,整个优化过程可以分为以下几个步骤: 优化网络 压缩资源 优化 JavaScript 优化 CSS 优化图片 优化渲染 下面我们将逐个分析每一步骤的技巧及其对应的示例。 优化网络 优化网络是性能优化…

    css 2023年6月10日
    00
  • 如何利用vue实现css过渡和动画

    利用Vue实现CSS过渡和动画是一个常见的需求。以下是实现过程的完整攻略: 1. 使用Vue的过渡类 Vue提供了一组CSS类来实现过渡效果。这些类可以在元素的进入、离开或状态改变时自动添加和移除。具体来说,这些类有以下几个: v-enter: 进入过渡的开始状态。 v-enter-active: 进入过渡的激活状态,一般用来定义过渡效果。 v-enter-…

    css 2023年6月10日
    00
  • Dreamweaver设置页面属性后采用HTML格式怎么办?

    如果在Dreamweaver中设置页面属性后,采用了HTML格式,有两种方法解决这个问题:使用CSS样式表和内联样式。 方法一:使用CSS样式表 步骤1:选择“文本” → “CSS样式” → “新样式”。 步骤2:在“新样式”窗口中,输入新的样式名称并选择“所在文件”。 步骤3:在新窗口中,根据需要设置文本属性,如字体、颜色、大小等。 步骤4:单击“应用”按…

    css 2023年6月9日
    00
  • CSS display:block在Firefox下显示布局错乱问题

    问题描述: 在Firefox下,使用CSS display:block属性设定元素为块状元素时,有时候会出现布局错乱问题。这个问题主要会出现在交互式元素、定位元素以及浮动元素上。 解决方案: 解决这个问题的方法是手动设置元素的宽度或者使用overflow:hidden属性。 方法一:手动设置宽度 如果一个块状元素没有设置宽度,那么Firefox会按照默认宽度…

    css 2023年6月10日
    00
  • 详谈DOM简介及节点、属性、查找节点的方法

    DOM(Document Object Model)是一种用于表示和操作HTML、XML文档的API,它将HTML、XML文档表示为一个树形结构,并且提供操作该树形结构的方法。在DOM模型中,文档被表示为节点和对象的组合,节点包括元素节点、文本节点、属性节点等,对象包括document对象、element对象等。 节点 在DOM模型中,所有的HTML元素都是…

    css 2023年6月9日
    00
  • Photoshop CC教程:您必须知道的CC新功能详细介绍

    Photoshop CC教程:您必须知道的CC新功能详细介绍 简介 Photoshop CC是一款非常流行的图像处理和编辑软件,它是Adobe公司推出的一款非常实用的软件。随着新版本的不断推出,Photoshop CC新增了许多新功能和更新,这些新功能使得图片处理更加高效简便。本文将会详细介绍Photoshop CC的新功能,包括: 更好的图片复制和粘贴功能…

    css 2023年6月10日
    00
  • 原生JS轮播图插件

    下面我就介绍一下如何制作一个原生JS轮播图插件的完整攻略。 步骤1:设计HTML结构 首先需要设计好轮播图的HTML结构,一般包括一个容器div,可以使用ul和li标签来构建轮播项,设计的结构应该符合插件的设计要求。 <div class="slider-container"> <ul class="slide…

    css 2023年6月9日
    00
  • Lesson03_01 什么是CSS和CSS的设置方式

    Lesson03_01 什么是CSS和CSS的设置方式 什么是CSS CSS(Cascading Style Sheets) 是一种样式表语言,用于描述网页上的文本、样式、布局等设计元素的外观、样式和排版。利用CSS,作者可以控制一个HTML文件的样式和外观,而无需修改HTML元素。 CSS主要作用是美化网页,为网页添加更多的样式,例如字体、字号、颜色、背景…

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