Posted in Javascript onJuly 17, 2010
这是个功能非常简单的类,只实现了拖拽的功能,当然,代码也因此保持了原始的简洁,下面是这个类库的代码:
代码
/************************************************** * 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/下载,代码非常简单,而且提供了很多易用的特性。并且网站上提供了非常详细的例子。
这个类库就像flash里面的startDrag方法,代码精简却功能实用。你想让某个组件能够拖动,你可以调用 Drag.init( ) 方法。
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个数字参数对应元素可以拖动的区域,左上和右下的x,y坐标。因此元素只能在(25,25),(25,200)的直线之间滑动,就想滚动条一样。
这个类库功能简单,但如果结合其他功能,将可以做出像flash那么炫的效果。
演示代码: http://demo.3water.com/js/dom-drag/demo.html
代码打包: https://3water.com/jiaoben/28492.html
一个js拖拽的效果类和dom-drag.js浅析
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@