下面是实现控件拖拽的完整代码。

(function ($) {var move = false;           //标记控件是否处于被拖动状态var dragOffsetX = 0;        //控件左边界和鼠标X轴的差var dragOffsetY = 0;        //控件上边界和鼠标Y轴的差var dragObj = null;         //用于存储当前对象$.fn.mydrag = function () {dragObj = this;this.mousedown(function (e) {move = true;//获取鼠标和该控件的位置偏移量,并存入全局变量供后续调用dragOffsetX = e.clientX - e.currentTarget.offsetLeft;dragOffsetY = e.clientY - e.currentTarget.offsetTop;});$(document).mousemove(function (e) {if (move) {//不断获取鼠标新的坐标,并计算出控件的新坐标var newX = e.clientX - dragOffsetX;var newY = e.clientY - dragOffsetY;//边界控制,document.documentElement.clientWidth:可见区域宽度  document.documentElement.clientHeight:可见区域高度newX = newX < 0 ? 0 : newX;newY = newY < 0 ? 0 : newY;newX = newX > (document.documentElement.clientWidth - dragObj.outerWidth()) ? (document.documentElement.clientWidth - dragObj.outerWidth()) : newX;newY = newY > (document.documentElement.clientHeight - dragObj.outerHeight()) ? (document.documentElement.clientHeight - dragObj.outerHeight()) : newY;//把新的坐标重新赋值给控件dragObj.css({ left: newX + "px", top: newY + "px", position: 'absolute' });}});$(document).mouseup(function () {if (move) {move = false;}});};
})(jQuery);

使用方法:

1、建一个js文件,将上述代码贴进去。

2、将该js文件引入页面。

3、调用方法:$("#id").mydrag();

或者还可以用下面这个插件替换上面这个插件,用法完全一样,效果有一点点不一样,可以自己体会。

(function ($) {var dragOffsetX = 0;        //控件左边界和鼠标X轴的差var dragOffsetY = 0;        //控件上边界和鼠标Y轴的差$.fn.mydrag = function () {this.mousedown(function (e) {//获取鼠标和该控件的位置偏移量,并存入全局变量供后续调用dragOffsetX = e.clientX - e.currentTarget.offsetLeft;dragOffsetY = e.clientY - e.currentTarget.offsetTop;});this[0].ondragend = this[0].ondrag = function (e) {//不断获取鼠标新的坐标,并计算出控件的新坐标var newX = e.clientX - dragOffsetX;var newY = e.clientY - dragOffsetY;//边界控制,document.documentElement.clientWidth:可见区域宽度  document.documentElement.clientHeight:可见区域高度newX = newX < 0 ? 0 : newX;newY = newY < 0 ? 0 : newY;newX = newX > (document.documentElement.clientWidth - this.width) ? (document.documentElement.clientWidth - this.width) : newX;newY = newY > (document.documentElement.clientHeight - this.height) ? (document.documentElement.clientHeight - this.height) : newY;//把新的坐标重新赋值给控件$(this).css({ left: newX + "px", top: newY + "px", position: 'absolute' });};};
})(jQuery);

JS 实现控件拖拽/拖动相关推荐

  1. C#利用控件拖拽技术制作拼图游戏

    C#利用控件拖拽技术制作拼图游戏 这篇文章主要介绍了C#利用控件拖拽技术制作拼图游戏的方法以及核心代码,需要的朋友可以参考下 主要实现的功能: 1.程序附带多张拼图随机拼图. 2.可手动添加拼图. 3 ...

  2. C++语言Qt实现控件拖拽和连线类似可视化操作Simulink仿真类软件 电路仿真软件 和模型驱动等软件

    目标:开发一个电路仿真软件. 内部原理:qt编写电路元件连接的可视化界面,输出电路节点连接关系为一张表.matlab编写电路仿真算法,读取节点连接表,进行运算,得出仿真结果,qt读取仿真结果并且在界面 ...

  3. 转大佬--C++语言Qt实现控件拖拽和连线类似可视化操作Simulink仿真类软件 电路仿真软件 和模型驱动等软件

    转自–标biao的文章:https://blog.csdn.net/kangkanglhb88008/article/details/120812524 目标:开发一个电路仿真软件. 内部原理:qt编 ...

  4. 组态软件--控件拖拽

    目录 组态软件--控件拖拽 实现功能 相关说明 两种思路 第一种思路 第二种方法 参考的博客 组态软件–控件拖拽 个人最近也是在用Qt做组态软件,一开始用QGraphics来做组态软件的UI设计程序, ...

  5. element ui 图片控件 排序_vuedraggable+element ui实现页面控件拖拽排序效果

    项目要实现一些控件的拖拽排序.从而找到了这款vuedraggable控件,供大家参考,具体内容如下 如上图要实现这些控件的拖拽排序 这是拖拽后 由于公司网络的原因,项目没有使用npm,都是使用的引入的 ...

  6. 15. QML控件拖拽并实现自动吸附功能

    效果展示: 效果1:自动吸附,但被拖拽控件无法重复使用 拖拽吸附不可重复 实现步骤: 1. 第一步: 简单布局,在左侧矩形区域中添加一个小的矩形框,是需要被拖拽的控件,重点是要对这个将要拖拽的小矩形控 ...

  7. java使用重绘实现拖动_原生JS使用Canvas实现拖拽式绘图功能

    一.实现的功能 1.基于oop思想构建,支持坐标点.线条(由坐标点组成,包含方向).多边形(由多个坐标点组成).圆形(包含圆心坐标点和半径)等实体 2.原生JavaScript实现,不依赖任何第三方j ...

  8. JQuery Dialog(JS模态窗口,可拖拽的DIV)

    JQuery Dialog(JS模态窗口,可拖拽的DIV) 吴剑 2012-08-08 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 效果图 调用示意图 ...

  9. Visual Studio 2017 ASP.NET在设计WEB页面时让控件可以自由拖动

    我对DIV/CSS一窍不通,时间紧急,需要完成WEB页面设计,因此想到了偷懒的方法,如果使用Visual Studio 2017 ASP.NET在设计WEB页面时让控件可以自由拖动,那就太好啦! 一. ...

最新文章

  1. 部署Small Business Server 2003服务器之二
  2. Eclipse创建的Maven项目报错Could not calculate build plan: Plugin
  3. 01--swift之基本运算符
  4. 华为交换机堆叠SVF助手(推荐)
  5. java rabbitmq 绑定_RabbitMQ:交换,队列和绑定 - 谁设置了什么?
  6. 中如何调取api_API(接口)是什么
  7. 2020Alibaba数学竞赛预选赛第一轮参考答案
  8. java-appium-527进阶-1 UiAutomator12区别和封装
  9. java redis 流水线,Redis系列(1) —— 流水线
  10. vsftp 具体操作
  11. 百面机器学习——什么是决策树
  12. 上海自考计算机及应用,上海交通大学--计算机及应用(独立本科080901)
  13. 人脸识别之一图像采集及人脸库的建立
  14. 中国吸尘器产业发展前瞻与市场投资盈利分析报告2021年版
  15. 树的计数 + prufer序列与Cayley公式(转载)
  16. Failed to create/setup connection: This driver is not configured for integrated authentication
  17. 女生节送什么礼物给女友,2022女生节送礼合集
  18. ONFI ZQ Calibration
  19. 流量不清零:用户开心,运营商无奈
  20. 嵌入式开发什么时候需要用RTOS?

热门文章

  1. 运动健身买什么耳机好用、最优秀的健身耳机推荐分享
  2. 信息安全数学基础 第4章 二次同余式与平方剩余
  3. 无功补偿仿真,simulink无功补偿仿真,matlab无功补偿SVG仿真
  4. 字符串的编码与构造、字符串格式化、字符串的截取、字符串常用函数、正则表达式
  5. 二叉树的链式存储结构
  6. 在IIS7上部署FluorineFx找不到Fluorine.aspx问题的解决
  7. 向云计算要技术红利,华为云定义云原生2.0时代
  8. java 字节与kb关系,位、字节、字、KB、MB关系
  9. Java提取图片文字 tess4j
  10. 无线移动通信中的多普勒效应及其消除方法