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日

相关文章

  • 右键-打开方式-选择程序,拒绝访问,怎么办?

    这种情况通常出现在Windows系统中,表示当前用户没有足够的权限来打开或运行某个程序或文件。以下是解决此问题的完整攻略: 以管理员身份运行程序或文件 右键点击程序或文件,选择“以管理员身份运行”,这通常是在打开某些需要管理员权限操作的软件时,首选的解决方法。例如,如果你使用的是Windows 10操作系统,你可以按住“Shift”键并右键单击文件或程序,然…

    other 2023年6月27日
    00
  • win32下的命令行集合

    win32下的命令行集合 Win32下的命令行集合是指Windows操作系统中提供的命令行工具,通过这些工具用户可以进行系统管理、文件操作、网络配置等各种任务。下面介绍一些常用的命令行工具及其用法。 命令行工具列表 以下是一些常用的命令行工具及其用途: cmd.exe: 用于在Windows操作系统中启动命令提示符窗口。 dir: 用于列出当前目录中的所有文…

    other 2023年6月26日
    00
  • Android仿硬币转动微信红包动画效果

    Android仿硬币转动微信红包动画效果攻略 简介 在本攻略中,我们将详细讲解如何实现Android仿硬币转动微信红包动画效果。该效果模拟了微信红包打开时硬币旋转的动画效果。 步骤 步骤一:准备工作 在开始之前,确保你已经具备以下条件:- Android开发环境已经搭建好。- 你已经创建了一个新的Android项目。 步骤二:导入资源文件 在项目的res目录…

    other 2023年9月6日
    00
  • C语言 超详细讲解库函数

    C语言 超详细讲解库函数 什么是库函数 库函数(Library Function)是预定义好的、可以直接被调用的函数,大大简化了程序员的开发工作。标准C库是由一系列的头文件和库文件组成的,它包含了许多有用的函数,如输入输出函数、字符串处理函数、数学函数等。 如何调用库函数 要使用库函数,我们需要在程序中包含相关的头文件,并将对应的库文件一同编译链接到程序中。…

    other 2023年6月27日
    00
  • Dreamweaver站点中新建文件夹和修改/删除/移动文件的操作方法

    下面是详细讲解Dreamweaver站点中新建文件夹和修改、删除、移动文件的操作方法。 新建文件夹 打开Dreamweaver软件,打开你创建的站点,确保“文件”窗口处于打开状态。 在“文件”窗口中找到你要新建文件夹的目录,右键单击并选择“新建文件夹”选项。 在弹出的对话框中输入文件夹名称,并选择你的文件夹创建位置,然后单击“新建”按钮即可。 示例:假设我们…

    other 2023年6月27日
    00
  • python通过函数属性实现全局变量的方法

    Python通过函数属性实现全局变量的方法 在Python中,函数属性可以用来实现全局变量的效果。函数属性是指函数对象的属性,可以在函数内部定义,并在函数外部访问。通过将变量作为函数属性,可以在函数调用之间保持变量的状态,实现全局变量的效果。 下面是实现全局变量的方法的详细攻略: 步骤1:定义函数并设置函数属性 首先,我们需要定义一个函数,并在函数内部设置函…

    other 2023年7月29日
    00
  • 电脑疑难80问

    “电脑疑难80问”攻略 背景介绍 “电脑疑难80问”是网站中的一个专题,旨在解决用户在电脑使用过程中遇到的各种问题。该专题提供了80个常见问题的解决方案,覆盖了软件应用、硬件故障、网络连接等多个方面。本攻略旨在为用户提供完整解决方案,保证用户能够在遇到问题时快速解决。 使用步骤 步骤一:根据问题类型选择文章 在“电脑疑难80问”专题页面,用户可根据所遇到的问…

    other 2023年6月25日
    00
  • Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解

    Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解 1. 分页插件的使用 Mybatis-Plus提供了强大的分页插件,可以方便地实现分页查询功能。以下是使用分页插件的步骤: 引入依赖:在项目的pom.xml文件中添加Mybatis-Plus的依赖。 <dependency> <groupId>com.baomido…

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