一个拖拽的效果类和dom-drag.js浅析
最近完成了一个Drag类,可以实现指定对象的拖拽效果。效果如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | /************************************************** * Drag.js * 作者:橡树小屋 07.17.2010 * http://www.cnblogs.com/babyzone2004/ *用法:Drag.initDrag(id); id是标签的id名称 **************************************************/ var Drag={ dragObject: null , mouseOffset: null , initDrag: function (item){ if (item){ this .item=document.getElementById(item); this .item.onmousedown= function (evnt){ document.onmousemove=Drag.mouseMove; document.onmouseup=Drag.mouseUp; Drag.dragObject= this ; Drag.mouseOffset=Drag.getMouseOffset( this ,evnt); return false ; } } }, mousePoint: function (x,y){ this .x=x; this .y=y; }, mousePosition: function (evnt){ evnt=evnt||window.event; var x=parseInt(evnt.clientX); var y=parseInt(evnt.clientY); return new Drag.mousePoint(x,y); }, getMouseOffset: function (target,evnt){ var mousePos=Drag.mousePosition(evnt); var x=mousePos.x-target.offsetLeft; var y=mousePos.y-target.offsetTop; return new Drag.mousePoint(x,y); }, mouseUp: function (evnt){ Drag.dragObject= null ; document.onmousemove = null ; document.onmouseup = null ; }, mouseMove: function (evnt){ if (!Drag.dragObject) return ; var mousePos=Drag.mousePosition(evnt); Drag.dragObject.style.position= "absolute" ; Drag.dragObject.style.top=mousePos.y-Drag.mouseOffset.y+ "px" ; Drag.dragObject.style.left=mousePos.x-Drag.mouseOffset.x+ "px" ; return false ; } } |
由于代码不是很复杂,所以就不详细展开说了。有需要的可以直接下载使用,导入后用Drag.initDrag(id名称)方法就可以应用了。
事实上,网上已经有一个轻量级的dom-drag类库(作者: Aaron Boodman),回头看到自己写的类库,内牛满面……,dom-drag类可以到http://boring.youngpup.net/projects/dom-drag/下载,代码非常简单,而且提供了很多易用的特性。并且网站上提供了非常详细的例子。
这里我将里面可以实现的效果集中在一起,访问请点击:
http://www.flagshiply.com/babyzone/mydemo/dom_drag_show.html
这个类库就像flash里面的startDrag方法,代码精简却功能实用。你想让某个组件能够拖动,你可以调用 Drag.init( ) 方法。
1 2 3 4 5 6 7 | init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper) o :是想现实鼠标拖动的组件; oRoot : 是o上层的组件,将随o一起拖动; minX, maxX, minY, maxY :设置鼠标拖动的范围, 由下面的例子cropper可以看出,如果有oRoot,那范围是由oRoot相对于页面来说的; bSwapHorzRef, bSwapVertRef :设置组件的优先权; fXMapper, fYMapper: 设置拖动的路径 |
其中第三个例子:
示例链接:http://boring.youngpup.net/projects/dom-drag/ex3.html
可以实现对拖动范围的限制,代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<script language="javascript" src="dom-drag.js"></script>
<style type="text/css">
#thumb {
position:absolute;
height:50px;
width:12px;
background-color:#eee;
border:1px outset #eee;
}
</style>
</head>
<body>
<div id="thumb" style="left:25px; top:25px;"></div>
<script language="javascript">
var aThumb = document.getElementById("thumb");
Drag.init(aThumb, ff;">null, 25, 25, 25, 200);
</script>
</body>
</html>
<script language="javascript">
var aThumb = document.getElementById("thumb");
Drag.init(aThumb, null, 25, 25, 25, 200);
</script>
init里面的4个数字参数对应元素可以拖动的区域,这里的minX, maxX, minY, maxY分别为25,25,25,200。X都是25,Y是从25到200,那就是说组件只能在Y轴上25到200的范围移动了。如果这4个属性设置为null,那就是说为null的属性是没有限制的了,如果4个都为null就是表示组件在页面上的拖动是没有限制的。因此元素只能在(25,25),(25,200)的直线之间滑动,就想滚动条一样。
需要注意的是,minX, maxX, minY, maxY是相对父级元素relative定位的。
这个类库功能简单,但如果结合其他功能,将可以做出像flash那么炫的效果。例如实现flash那样的缓动滚动条效果:
http://www.cnblogs.com/babyzone2004/archive/2010/07/18/1780000.html
by 橡树小屋 from http://www.cnblogs.com/babyzone2004/
本文地址:http://www.cnblogs.com/babyzone2004/archive/2010/07/17/1779538.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架