jquery 可拖拽的窗体控件实现代码

首先,我们需要明白,jquery 是一个 JavaScript 库,它提供了方便的 DOM 操作封装,特别是对于 HTML 文档的遍历和操作、事件的处理、动画和 Ajax 前端数据交互等方面。因此,如果我们想要实现可拖拽的窗体控件,使用 jQuery 会让我们轻松地完成这个需求。

下面是代码的具体实现过程:

实现可拖拽的 div 元素

HTML 代码

<div id="dragDiv" style="background-color: #aaa; width: 280px; height: 200px; position: absolute; left: 200px; top: 150px;">
  <h4 style="cursor: move;">拖动这个 div 元素</h4>
  <div style="height: 160px; overflow: auto;">
    <p>这里是可滚动的内容区域</p>
  </div>
</div>

注意到在 HTML 结构中,我们给 div 元素添加了一个 h4 元素,这是我们后续所要拖动的元素。

CSS 代码

#dragDiv {
  cursor: move;
}

这里简单地修改了光标样式。

JavaScript 代码

// 移动方块
function drag() {
  var odiv = document.getElementById('dragDiv');
  var windowWidth = document.documentElement.clientWidth;
  var windowHeight = document.documentElement.clientHeight;
  var divWidth = odiv.offsetWidth;
  var divHeight = odiv.offsetHeight;
  odiv.onmousedown = function(event) {
    var event = event || window.event;
    var disX = event.clientX - odiv.offsetLeft;
    var disY = event.clientY - odiv.offsetTop;
    document.onmousemove = function(event) {
      var event = event || window.event;
      var moveLeft = event.clientX - disX;
      var moveTop = event.clientY - disY;
      if (moveLeft < 0) {
        moveLeft = 0;
      } else if (moveLeft > windowWidth - divWidth) {
        moveLeft = windowWidth - divWidth;
      }
      if (moveTop < 0) {
        moveTop = 0;
      } else if (moveTop > windowHeight - divHeight) {
        moveTop = windowHeight - divHeight;
      }
      odiv.style.left = moveLeft + 'px';
      odiv.style.top = moveTop + 'px';
    };
    document.onmouseup = function() {
      document.onmousemove = null;
      document.onmouseup = null;
    };
  };
}
drag();

在 JavaScript 代码中,我们定义了一个 drag 函数,通过 id 获取 div 元素,只有在拖动 h4 元素的时候才能移动 div 元素。同时,我们获取了浏览器窗口的宽度、高度,以及 div 元素的宽度和高度,用于后续计算限制拖动的范围。

后续,我们通过 onmousedown 事件,获取鼠标点击时鼠标距离元素左侧和顶部的距离。同时,通过 onmousemove 事件,动态修改 div 元素的 left 和 top,实现拖动。这里还有一个限制条件,是当元素拖动到窗口边缘时停止拖动。

最后,通过 onmouseup 事件,清除掉 onmousemove 和 onmouseup 的事件绑定。

这样我们就成功实现了一个简单的可拖拽的 div 元素。

实现可拖拽的窗体

HTML 代码

<div id="dragWindow" class="drag-window">
  <div class="drag-window-title">
    <h3>绘画板</h3>
    <button class="close-button">X</button>
  </div>
  <div class="drag-window-content">
    <p>这里是窗口的内容区域</p>
  </div>
</div>

HTML 结构中,我们先定义了一个 div 元素,它作为整个窗体的容器。同时,我们还定义了一个 div 元素,里面放了窗体标题和关闭按钮。

CSS 代码

.drag-window {
  background: #fff;
  border: 1px solid #ccc;
  width: 300px;
  height: 200px;
  padding: 10px;
  position: absolute;
  left: 50%;
  top: 50%;
  margin-left: -150px;
  margin-top: -100px;
  z-index: 99999;
}

.drag-window-title {
  background: #ccc;
  padding: 8px;
  cursor: move;
}

.drag-window-content {
  height: 160px;
  overflow: auto;
}

在 CSS 代码中,我们对窗体进行了样式调整。其中,drag-window 和 drag-window-title 的内容可能更容易让人理解。

JavaScript 代码

// 移动窗口
function dragWindow() {
  var odiv = document.getElementById('dragWindow');
  var windowWidth = document.documentElement.clientWidth;
  var windowHeight = document.documentElement.clientHeight;
  var divWidth = odiv.offsetWidth;
  var divHeight = odiv.offsetHeight;
  var moveX;
  var moveY;
  var isDrag = false;
  var oTitle = odiv.getElementsByClassName('drag-window-title')[0];
  // 拖动
  oTitle.onmousedown = function(event) {
    var event = event || window.event;
    var disX = event.clientX - odiv.offsetLeft;
    var disY = event.clientY - odiv.offsetTop;
    isDrag = true;
    odiv.style.cursor = 'move';
    document.onmousemove = function(event) {
      if (!isDrag) return;
      var event = event || window.event;
      var x = event.clientX - disX;
      var y = event.clientY - disY;

      if (x < 0) {
        x = 0;
      } else if (x > windowWidth - divWidth) {
        x = windowWidth - divWidth;
      }
      if (y < 0) {
        y = 0;
      } else if (y > windowHeight - divHeight) {
        y = windowHeight - divHeight;
      }

      odiv.style.left = x + 'px';
      odiv.style.top = y + 'px';
    };
    // 释放
    document.onmouseup = function() {
      isDrag = false;
      odiv.style.cursor = 'default';
    };
  };
  // 点击关闭按钮
  odiv.getElementsByClassName('close-button')[0].onclick = function() {
    odiv.style.display = 'none';
  };
}
dragWindow();

这里代码逻辑和 div 元素拖动类似,只是需要获取更多位置信息,同时在拖动的同时进行判断,当拖动到窗口边缘时不再移动。后续还添加了关闭按钮的方法,这里不再介绍。

总的来说,完成一个可拖拽窗体并不是很困难,只需要合理运用 jQuery 提供的 DOM 操作方法,加入一些判断条件即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery 可拖拽的窗体控件实现代码 - Python技术站

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

相关文章

  • C语言二叉树常见操作详解【前序,中序,后序,层次遍历及非递归查找,统计个数,比较,求深度】

    C语言二叉树常见操作详解 什么是二叉树 二叉树是一种重要的数据结构,它由节点组成,每个节点最多有两个子节点,左子节点和右子节点。 二叉树具有以下性质: 每个节点最多有两个子节点。 左子节点的值小于父节点的值。 右子节点的值大于父节点的值。 左右子树都是二叉树。 二叉树的基本操作 1.创建一个二叉树 使用递归的方式来创建一个二叉树,每次创建节点时,递归创建左右…

    other 2023年6月27日
    00
  • Java动态脚本Groovy获取Bean技巧

    Java动态脚本Groovy获取Bean技巧 在Java中使用Groovy可以轻松地使用动态脚本获取Bean。这里介绍一些Java动态脚本Groovy获取Bean的技巧。 导入Groovy库 Groovy是一种基于JVM的动态脚本语言,所以它可以和Java代码一起运行。为了使用Groovy获取Bean,需要在Java项目中导入Groovy库。 示例代码 @G…

    other 2023年6月27日
    00
  • MyBatisPlus-QueryWrapper多条件查询及修改方式

    MyBatisPlus-QueryWrapper多条件查询及修改方式攻略 简介 MyBatisPlus是一个优秀的持久层框架,提供了丰富的查询和修改功能。其中,QueryWrapper是MyBatisPlus提供的一个用于构建查询条件的工具类,可以方便地实现多条件查询和修改操作。 多条件查询 使用QueryWrapper进行多条件查询的步骤如下: 导入相关依…

    other 2023年7月28日
    00
  • js 正则验证密码强度(包含数字+特殊字符+英文字母大小写)

    当我们需要验证密码强度时,可以使用正则表达式来检查密码是否符合特定的要求。下面是一个使用JavaScript编写的正则表达式,用于验证密码是否包含数字、特殊字符和英文字母的大小写。 ^(?=.*[0-9])(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z]).{8,}$ 这个正则表达式的含义如下: ^:匹配字符串的开始位置。 …

    other 2023年8月18日
    00
  • MySQL存储IP地址的方法

    MySQL存储IP地址的方法 在MySQL中,可以使用不同的方法来存储IP地址。下面是一种常见的方法,使用无符号整数(UNSIGNED INT)来存储IP地址。 步骤1:创建表格 首先,我们需要创建一个表格来存储IP地址。可以使用以下的SQL语句创建一个名为ip_addresses的表格: CREATE TABLE ip_addresses ( id INT…

    other 2023年7月30日
    00
  • 固态硬盘的常用分区格式介绍以及用哪种分区格式好

    固态硬盘的常用分区格式介绍 固态硬盘常用的分区格式有主分区、扩展分区和逻辑分区,此外还有文件系统格式。 主分区 主分区是最基本的一种分区方式,一个硬盘上最多可以分出四个主分区。一般情况下,一个固态硬盘只需要一个主分区即可。 扩展分区 扩展分区是用于分出多个逻辑分区的一种特殊分区。一个硬盘上最多只能有一个扩展分区,但在扩展分区内可以分出多个逻辑分区。 逻辑分区…

    other 2023年6月27日
    00
  • 关于spring中单例Bean引用原型Bean产生的问题及解决

    当然!下面是关于\”关于Spring中单例Bean引用原型Bean产生的问题及解决\”的完整攻略,包含两个示例说明。 … … … … … … … … … … … … … … … … … … … … … … …

    other 2023年8月20日
    00
  • 详解JavaScript的内存空间、赋值和深浅拷贝

    详解JavaScript的内存空间、赋值和深浅拷贝 在JavaScript中,理解内存空间、赋值和拷贝是非常重要的。本攻略将详细解释这些概念,并提供示例来帮助理解。 内存空间 在JavaScript中,所有的变量和对象都存储在内存中。内存空间可以分为栈内存和堆内存。 栈内存:用于存储基本类型的值,如数字、布尔值和字符串等。栈内存的分配和释放速度很快,但容量较…

    other 2023年7月31日
    00
合作推广
合作推广
分享本页
返回顶部