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


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
Javascript 相关文章推荐
JavaScript 解析读取XML文档 实例代码
Jul 07 Javascript
jquery 得到当前页面高度和宽度的两个函数
Feb 21 Javascript
人人网javascript面试题 可以提前实现下
Jan 05 Javascript
jquery如何扑捉回车键触发的事件
Apr 24 Javascript
JS+CSS实现的经典tab选项卡效果代码
Sep 16 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
Mar 22 Javascript
JS模拟实现方法重载示例
Aug 03 Javascript
BootStrap中Table分页插件使用详解
Oct 09 Javascript
JS使用正则表达式验证身份证号码
Jun 23 Javascript
在vue-cli中引入lodash.js并使用详解
Nov 13 Javascript
判断JavaScript中的两个变量是否相等的操作符
Dec 21 Javascript
如何将JavaScript将数组转为树形结构
Jun 02 Javascript
JavaScript 浏览器验证代码(来自discuz)
Jul 17 #Javascript
IE6,IE7下js动态加载图片不显示错误
Jul 17 #Javascript
js模拟类继承小例子
Jul 17 #Javascript
javascript 循环读取JSON数据的代码
Jul 17 #Javascript
一个可绑定数据源的jQuery数据表格插件
Jul 17 #Javascript
js跨域问题之跨域iframe自适应大小实现代码
Jul 17 #Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
Jul 17 #Javascript
You might like
简单采集了yahoo的一些数据
2007/02/14 PHP
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
php简单实现多语言切换的方法
2016/05/09 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
2017/09/13 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
vue使用原生swiper代码实例
2020/02/05 Javascript
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
numpy.random.seed()的使用实例解析
2018/02/03 Python
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
python中reader的next用法
2018/07/24 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
对python中UDP,socket的使用详解
2019/08/22 Python
Python 面向对象部分知识点小结
2020/03/09 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
2014年庆元旦活动方案
2014/02/15 职场文书
2014年端午节活动方案
2014/03/11 职场文书
大学生社会实践评语
2014/04/25 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
使用javascript解析二维码的三种方式
2021/11/11 Javascript
一条 SQL 语句执行过程
2022/03/17 MySQL
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers
MySQL如何使备份得数据保持一致
2022/05/02 MySQL