一个js拖拽的效果类和dom-drag.js浅析_Javascript教程-查字典教程网
一个js拖拽的效果类和dom-drag.js浅析
一个js拖拽的效果类和dom-drag.js浅析
发布时间:2016-12-30 来源:查字典编辑
摘要:这是个功能非常简单的类,只实现了拖拽的功能,当然,代码也因此保持了原始的简洁,下面是这个类库的代码:代码复制代码代码如下:/********...

这是个功能非常简单的类,只实现了拖拽的功能,当然,代码也因此保持了原始的简洁,下面是这个类库的代码:

代码

复制代码 代码如下:

/**************************************************

* 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"></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.jb51.net/js/dom-drag/demo.html

代码打包: http://www.jb51.net/jiaoben/28492.html

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类