一个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
Oct 31 Javascript
常见表单重复提交问题整理及解决方法
Nov 13 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
Nov 19 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
Oct 10 Javascript
浅析AngularJS中的指令
Mar 20 Javascript
jQuery插件编写步骤详解
Jun 03 Javascript
javascript笔记之匿名函数和闭包
Feb 06 Javascript
Vue代码分割懒加载的实现方法
Nov 23 Javascript
koa+jwt实现token验证与刷新功能
May 30 Javascript
webpack 如何解析代码模块路径的实现
Sep 04 Javascript
vue使用better-scroll实现滑动以及左右联动
Jun 30 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
Sep 14 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自动反斜杠的函数代码
2010/01/05 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
php搜索文件程序分享
2015/10/30 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
验证用户是否修改过页面的数据的实现方法
2008/09/26 Javascript
javascript 多浏览器 事件大全
2010/03/23 Javascript
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
小程序云开发之用户注册登录
2019/05/18 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
Python的Flask框架标配模板引擎Jinja2的使用教程
2016/07/12 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
2018/01/24 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
python提取包含关键字的整行数据方法
2018/12/11 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
python Xpath语法的使用
2020/11/26 Python
HTML5 解析规则分析
2009/08/14 HTML / CSS
Miller Harris官网:英国小众香水品牌
2020/09/24 全球购物
软件测试工程师笔试题带答案
2015/03/27 面试题
小学教师的个人自我鉴定
2013/10/26 职场文书
担保书怎么写
2014/04/01 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
Python关于OS文件目录处理的实例分享
2021/05/23 Python
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python
MySQL中utf8mb4排序规则示例
2021/08/02 MySQL