一个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 相关文章推荐
HTML 自动伸缩的表格Table js实现
Apr 01 Javascript
JavaScript 组件之旅(一)分析和设计
Oct 28 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
Aug 29 Javascript
JQuery触发radio或checkbox的change事件
Dec 18 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
Jun 01 Javascript
JavaScript中ES6 Babel正确安装过程
Jul 18 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
Feb 12 Javascript
深入理解javascript的getTime()方法
Feb 16 Javascript
Angular.js基础学习之初始化
Mar 10 Javascript
原生JS实现瀑布流插件
Feb 06 Javascript
element-ui组件table实现自定义筛选功能的示例代码
Mar 15 Javascript
搭建一个Koa后端项目脚手架的方法步骤
May 30 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不允许用户提交空表单(php空值判断)
2013/11/12 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
PHP.vs.JAVA
2016/04/29 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
JQuery 获取Dom元素的实例讲解
2017/07/08 jQuery
JavaScript html5 canvas实现图片上画超链接
2017/10/20 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
python求列表交集的方法汇总
2014/11/10 Python
简单理解Python中基于生成器的状态机
2015/04/13 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
Python requests模块实例用法
2019/02/11 Python
Python高阶函数、常用内置函数用法实例分析
2019/12/26 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
物业工作计划书
2014/01/10 职场文书
成绩单家长评语大全
2014/04/16 职场文书
解除劳动合同协议书范本
2014/09/13 职场文书
2014年班组建设工作总结
2014/12/01 职场文书
学生检讨书范文
2015/01/27 职场文书
秋菊打官司观后感
2015/06/03 职场文书
Go 语言结构实例分析
2021/07/04 Golang
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android
Redis keys命令的具体使用
2022/06/05 Redis