实现dom元素拖动

本文主要写一下如何实现dom元素拖动,目前使用jquery库实现之。

主要的注释附在代码中,大家可以根据代码画一个小的窗口模型图,以便于理解。

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8">
 5     <title>实现dom元素拖动</title>
 6     <style>
 7         .dialog {
 8             position: absolute;
 9             top: 0;
10             left: 0;
11             width: 500px;
12             height: 400px;
13             background-color: blue;
14         }
15     </style>
16     <script src="js/jquery-1.7.2.js"></script>
17 </head>
18 <body>
19     <div class="dialog dialog-drag">拖动</div>
20     <script>
21         (function($) {
22             var windowWidth,
23                 windowHeight,
24                 mouseToDialogX,
25                 mouseToDialogY,
26                 dialogWidth,
27                 dialogHeight;
28             var $target,
29                 $doc = $(document);
30             var _move = function(e) {
31                 var nowTop,
32                     nowLeft,
33                     pageX = e.pageX,
34                     pageY = e.pageY;
35                 // top
36                 // 界限值:当对话框拖动到上边界时,将top置为0
37                 if (pageY - mouseToDialogY < 0) {
38                     nowTop = 0;
39                 }
40                 // 界限值:当对话框拖动到下边界时,将top置为(窗口高度-对画框高度),即将对话框底部与页面平齐
41                 else if (dialogHeight + (pageY - mouseToDialogY) > windowHeight) {
42                     nowTop = windowHeight - dialogHeight;
43                 }
44                 // 正常值:鼠标纵向坐标-鼠标纵向坐标与对话框上边缘的距离
45                 else {
46                     nowTop = pageY - mouseToDialogY;
47                 }
48                 // left - 解释同上
49                 if (pageX - mouseToDialogX < 0) {
50                     nowLeft = 0;
51                 } else if (dialogWidth + (pageX - mouseToDialogX) > windowWidth) {
52                     nowLeft = windowWidth - dialogWidth;
53                 } else {
54                     nowLeft = pageX - mouseToDialogX;
55                 }
56                 $target.css({
57                     left: nowLeft,
58                     top: nowTop
59                 });
60             };
61             // 拖动开始
62             $doc.on(‘mousedown‘, ‘.dialog-drag‘, function (e) {
63                 var $this = $(this),
64                     $win = $(window);
65                 $target = $this;
66                 windowWidth = $win.width();
67                 windowHeight = $win.height();
68                 mouseToDialogX = e.pageX - $this.offset().left;
69                 mouseToDialogY = e.pageY - $this.offset().top;
70                 dialogWidth = $this.width();
71                 dialogHeight = $this.height();
72                 // 只有对话框拖动时,才会有mousemove事件
73                 $(document).on(‘mousemove‘, _move);
74             });
75             // 拖动结束
76             $doc.on(‘mouseup‘, ‘.dialog-drag‘, function (e) {
77                 $target = null;
78                 // 当拖动结束时, 解绑mousemove事件
79                 $(document).off(‘mousemove‘, _move);
80             });
81         })(jQuery);
82
83     </script>
84 </body>
85 </html>
时间: 2024-12-08 13:14:27

实现dom元素拖动的相关文章

设置dom元素可拖动,支持ie5+

摘要: 最近在项目中要做一个图片预览的功能,这时候会遇到用户上传很大的图片,已经超出视图界面.最终决定做一个在固定宽和高的位置,用户可以拖动图片查看.所以自己就写了一个支持ie5+,chrome,Firefox,opera等浏览器的可拖动dom元素的插件. 项目地址:https://github.com/baixuexiyang/drag 实例: var drag = new Drag("test", { onStart: function(){ }, onMove: function

点击事件然后页面跳转到指定DOM元素的位置

设置一个函数,执行函数滚动条自动拖动,页面跳转到指定DOM元素的位置. 实现方式很简单,首先引入animatescroll.js文件(要先引入JQuery),然后 $('#id').animatescroll(); 即可调到指定DOM元素在页面的位置. 为方便可以编写一个函数,传入DOM元素的ID function jumpTo(id){ $("#"+id).animatescroll(); } 附animatescroll.js /* 使用方法: $("#id")

操作DOM元素,Dom元素添加颜色,删除第二个li元素

<html> <head> <title>demo</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript"> /* 示例操作DOM元素 */ window.onload = function(){ //给Dom元素添

【温故而知新-Javascript】为DOM元素设置样式

1. 使用样式表 可以通过document.styleSheets属性访问文档中可用的CSS样式表,它会返回一组对象集合,这些对象代表了与文档管理的各个样式表. 每个样式表 都由一个CSSStyleSheet 对象代表,它提供了一组属性和方法来操作文档里的样式. 1.1 获得样式表的基本信息 第一步是获得定义在文档中的样式表的一些基本信息. <!DOCTYPE html> <html lang="en"> <head> <meta charse

IE attachEvent事件处理程序(事件绑定的函数)的this指向的是window不是执行当前事件的dom元素

IE attachEvent事件处理程序(事件绑定的函数)的this指向的是window不是执行当前事件的dom元素. attachEvent(type,listener); listener函数中的this不是指向执行当前事件的dom而是window切记,感觉这一点IE做的太奇怪了!

JavaScript HTML DOM 元素(节点)

JavaScript HTML DOM 元素(节点) 创建新的 HTML 元素 创建新的 HTML 元素 如需向 HTML DOM 添加新元素,您必须首先创建该元素(元素节点),然后向一个已存在的元素追加该元素. 实例 <div id="div1"><p id="p1">This is a paragraph.</p><p id="p2">This is another paragraph.<

html2canvas根据DOM元素样式实现网页截图

html2canvas根据DOM元素样式实现网页截图 html2canvas是一个相当不错的JavaScript类库,它使用了html5和css3的一些新功能特性,实现了在客户端对网页进行截图的功能.html2canvas通过获取页面的DOM和元素的样式信息,并将其渲染成canvas图片,从而实现给页面截图的功能. 它不需要来自服务器任何渲染,整张图片都是在客户端浏览器创建.当浏览器不支持Canvas时,将采用Flashcanvas或ExplorerCanvas技术代替实现.以下浏览器能够很好的

使用dom元素和jquery元素实现简单增删改的练习

软件开发实际就是数据的增删改查,javascript前端开发也不例外.今天学了jquery框架的简单使用.于是用它实现简单的增删改,接着也用原始的javascript实现同样的功能,以便看出jquery的强大: 代码如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" con

前端性能优化-精确的控制dom元素

6.dom操作 精确的控制dom元素(id 选择器) 1.浏览器的开发者工具针对页面进行调优 Network窗口 Stalled(阻塞) DNS Lookup(域名解析) dns缓存 建立持久连接 Initial connection(初始化连接) SSL(包含于HTTPS连接中) Waiting(等待响应) Request sent(发送请求) Content Download(下载) 2. js调试 设置在DOM node发生变化时触发断点 dom 右键 Break on 可以设置成这个节点