一个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 相关文章推荐
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
Mar 01 Javascript
一个CSS+jQuery实现的放大缩小动画效果
Feb 19 Javascript
Jquery.Form 异步提交表单的简单实例
Mar 03 Javascript
深入分析Javascript事件代理
Jan 30 Javascript
Angularjs中使用Filters详解
Mar 11 Javascript
js 获取站点应用名的简单实例
Aug 18 Javascript
使用Javascript监控前端相关数据的代码
Oct 27 Javascript
vue一步步实现alert功能
Jul 05 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
Sep 11 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
Sep 28 Javascript
javascript数组去重方法总结(推荐)
Mar 20 Javascript
js实现抽奖功能
Nov 24 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
php中的curl使用入门教程和常见用法实例
2014/04/10 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
window.js 主要包含了页面的一些操作
2009/12/23 Javascript
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
jQuery中after的两种用法实例
2013/07/03 Javascript
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
window.location的重写及判断location是否被重写
2014/09/04 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
javascript封装简单实现方法
2015/08/11 Javascript
js实现可键盘控制的简单抽奖程序
2016/07/13 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
vue 扩展现有组件的操作
2020/08/14 Javascript
python实现查询苹果手机维修进度
2015/03/16 Python
python 删除非空文件夹的实例
2018/04/26 Python
Python中的random.uniform()函数教程与实例解析
2019/03/02 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
在python3中实现更新界面
2020/02/21 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
python爬虫工具例举说明
2020/11/30 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
大一学生的职业生涯规划书范文
2014/01/19 职场文书
英语求职信范文
2014/05/23 职场文书
质量保证书格式
2015/02/27 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
工伤调解协议书
2016/03/21 职场文书
导游词之安徽九华山
2019/09/18 职场文书
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技
Github 使用python对copilot做些简单使用测试
2022/04/14 Python