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日

相关文章

  • Win9传闻汇总:通知中心+免费下载+手势功能等

    Win9传闻汇总:通知中心+免费下载+手势功能等 Win9是微软公司计划推出的新一代Windows操作系统,许多传闻称其将具备一系列新特性和功能以满足用户需求。 1. 通知中心 据传Win9将新增“通知中心”功能,类似于Mac OS X和Android系统中的通知中心,用户可以在此处收集和管理系统和应用程序的通知消息。具体实现可以在任务栏隐藏一个小图标,点击…

    other 2023年6月25日
    00
  • c# 串口发送接收数据

    c# 串口发送接收数据 串口通信是一种常见的通信方式,它可以用于连接嵌入式设备、传感器、机器人等设备,实现数据的收发,并进行相应的处理。在 c# 开发中,串口通信通常使用 SerialPort 类实现,该类提供了一系列与串口通信相关的属性和方法,本文将介绍如何使用 SerialPort 类实现 c# 中的串口通信,包括串口的打开、发送和接收等操作。 打开串口…

    其他 2023年3月28日
    00
  • iOS12降级提示未能更新iPhone,发生未知错误(1667)的解决方法

    iOS12降级提示未能更新iPhone,发生未知错误 (1667) 的解决方法 如果你正在尝试降级到 iOS 12,并且在更新过程中遇到错误代码 1667,则说明升降级过程中出现了一些问题。这里提供了一些可行的解决方法来帮助您解决问题。 解决方法一:更新 iTunes 首先,您需要确保您正在使用最新版本的 iTunes 软件。例如,如果您使用的是旧版 iTu…

    other 2023年6月27日
    00
  • armv7l1cache详解

    以下是关于“armv7l1cache详解”的完整攻略,包括armv7l1cache的定义、工作原理、示例和注意事项。 armv7l1cache的定义 armv7l1cache是ARM架构中的一种缓存,用于提高CPU访问内存的速度。它是一种硬件缓存,位于CPU和内存之间,可以存储最近访问的数据和指令。 armv7l1cache的工作原理 armv7l1cach…

    other 2023年5月8日
    00
  • 字符串拼接的批处理

    下面是关于“字符串拼接的批处理”的完整攻略。 什么是字符串拼接的批处理? 字符串拼接的批处理是指将多个字符串连接成一个或多个长字符串的操作,该操作通常在Windows批处理或CMD(命令提示符)环境中使用。字符串拼接的批处理通常使用“set”命令与“+”运算符组合来实现。 字符串拼接的基本语法 下面是基本的字符串拼接语法: set string1=这是第一个…

    other 2023年6月20日
    00
  • JS表格组件神器bootstrap table详解(基础版)

    JS表格组件神器bootstrap table详解(基础版) 什么是Bootstrap Table Bootstrap Table是一个功能强大的jQuery表格插件,可以快速地在Web应用程序中添加数据表格。它集成了许多常见的功能和选项,包括数据排序、分页、过滤、列对齐、自适应和可定制的模板等等。Bootstrap Table还支持多个数据源,可以通过JS…

    other 2023年6月20日
    00
  • Windows Server 2012的配置与部署

    Windows Server 2012的配置与部署的完整攻略 本文将为您提供Windows Server 2012的配置与部署的完整攻略,包括介绍、方法和两个示例说明。 介绍 Windows Server 2012是微软推出的一款服务器操作系统,具有高度的可靠性、安全性和可扩展性。在使用Windows Server 2012时,需要进行配置和部署,以满足不同…

    other 2023年5月6日
    00
  • this.$router.push不跳转设定页面

    在Vue.js中,使用this.$router.push方法可以实现路由跳转。但是,有时候可能会出现this.$router.push不跳转设定页面的问题。以下是一个完整攻略,介了解决this.$router.push不跳转设定页面的方法: 步骤1:检查路由配置 要使用this.$router.push方法进行路由跳转,必须首先在路由配置中定义路由。如果路由…

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