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日

相关文章

  • 织梦dedecms整合添加ckplayer播放器支持flv,mp4等播放功能

    添加CKPlayer播放器,为DedeCMS网站提供支持FLV、MP4等格式的视频播放功能是一项非常实用的工作,下面是整合添加CKPlayer播放器支持FLV、MP4等播放功能的完整攻略: 1、下载所需文件 鄙人提供一个CKplayer.aspx文件下载,这里我们使用的是ASP.NET的版本。 2、上传文件到网站项目根目录 将下载好的CKplayer.asp…

    other 2023年6月27日
    00
  • 电脑时间位置上显示自定义文字的设置方法

    下面是“电脑时间位置上显示自定义文字的设置方法”的完整攻略。 前置条件 一台Windows操作系统的电脑 管理员权限的用户账户 步骤 1. 打开“控制面板” 在电脑的桌面或开始菜单中,点击“开始”按钮或者按下“Win”键,然后搜索“控制面板”,点击打开。 2. 进入“时钟和区域” 在“控制面板”中找到“时钟和区域”选项,点击打开。 3. 进入“日期和时间” …

    other 2023年6月25日
    00
  • Lua中字符串(string)浅析

    Lua中字符串(string)浅析 在Lua中,字符串(string)是一种基本数据类型,用于表示和处理文本数据。本文将对Lua中字符串的定义、常见操作、转义字符、长字符串等内容进行分析并结合示例进行说明。 字符串的定义 在Lua中,字符串字面量可以用引号(单引号或双引号)来表示,例如: local str1 = "hello, world&quo…

    other 2023年6月20日
    00
  • SQL SERVER的数据类型

    首先,SQL SERVER 的数据类型可以分为以下几种: 数值型(Numeric) 字符型(Character) 日期/时间型(Datetime) 布尔型(Boolean) 二进制型(Binary) 其他类型 接下来,我们将详细介绍每种数据类型。 数值型(Numeric) SQL Server 中常用的数值型数据类型包括:INT、BIGINT、DECIMAL…

    other 2023年6月25日
    00
  • Linux openvswitch性能调优

    Linux openvswitch性能调优 Openvswitch是一种流行的开源虚拟交换机,它提供了一些高级网络功能,包括网桥、VLAN、隧道以及负载均衡等。然而,在高负荷的网络环境下,openvswitch经常面临性能瓶颈的问题。本篇文章将探讨openvswitch的性能调优技巧。 1. 选择合适的硬件 在实现数据包传输的时候,openvswitch需要…

    其他 2023年3月28日
    00
  • 如何把pandas所有数据变成一个list

    以下是如何把pandas所有数据变成一个list的完整攻略,过程中包含两个示例说明的标准Markdown格式文本: 如何把pandas所有数据变成一个list的完整攻略 在pandas中,可以使用values属性将DataFrame或Series对象转换为NumPy数组,然后使用tolist()将数组转换为Python列表。以下是将pandas所有数据转换为…

    other 2023年5月10日
    00
  • 详解Android中Dialog的使用

    详解Android中Dialog的使用 Dialog是Android中常用的一种用户界面组件,用于显示一些临时性的信息、接收用户输入或进行简单的交互。本攻略将详细介绍Android中Dialog的使用方法,并提供两个示例说明。 1. 创建Dialog 要创建一个Dialog,可以使用AlertDialog.Builder类。以下是创建Dialog的基本步骤:…

    other 2023年9月6日
    00
  • 读取android根目录下的文件或文件夹实例

    读取 Android 根目录下的文件或文件夹有多种方法,以下是一些通用的方法: 使用Context类的getExternalStorageDirectory()方法: 这是最简单的方法之一,可以使用以下代码实现: File rootDirectory = Environment.getExternalStorageDirectory(); getExtern…

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