一个拖拽的效果类和dom-drag.js浅析

最近完成了一个Drag类,可以实现指定对象的拖拽效果。效果如下

点击拖拽
点击拖拽
这是个功能非常简单的类,只实现了拖拽的功能,当然,代码也因此保持了原始的简洁,下面是这个类库的代码:
/**************************************************
 * 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.οnmοusedοwn=function(evnt){
				document.οnmοusemοve=Drag.mouseMove;
				document.οnmοuseup=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( ) 方法。

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

 

一个拖拽的效果类和dom-drag.js浅析

by 橡树小屋 from http://www.cnblogs.com/babyzone2004/

本文地址:http://www.cnblogs.com/babyzone2004/archive/2010/07/17/1779538.html

转载于:https://www.cnblogs.com/babyzone2004/archive/2010/07/17/1779538.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值