一个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 相关文章推荐
使用TextRange获取输入框中光标的位
Oct 14 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
Dec 10 Javascript
javascript禁止超链接跳转的方法
Feb 02 Javascript
jQuery表格的维护和删除操作
Feb 03 Javascript
js css3实现图片拖拽效果
Mar 04 Javascript
详解利用jsx写vue组件的方法示例
Jul 17 Javascript
JQuery 选择器、DOM节点操作练习实例
Sep 28 jQuery
详细分析jsonp的原理和实现方式
Nov 20 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
Aug 16 Javascript
js实现下拉框二级联动
Dec 04 Javascript
JavaScript中.min.js和.js文件的区别讲解
Feb 13 Javascript
比较node.js和Deno
Apr 27 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
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
php过滤敏感词的示例
2014/03/31 PHP
php建立Ftp连接的方法
2015/03/07 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
2013/11/25 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
使用js画图之饼图
2015/01/12 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
express如何使用session与cookie的方法
2018/01/30 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
MySQLdb ImportError: libmysqlclient.so.18解决方法
2014/08/21 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
详解Python自建logging模块
2018/01/29 Python
python3爬取各类天气信息
2018/02/24 Python
python使用sqlite3时游标使用方法
2018/03/13 Python
Django 在iframe里跳转顶层url的例子
2019/08/21 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
canvas简单连线动画的实现代码
2020/02/04 HTML / CSS
责任书格式范文
2014/07/28 职场文书
高中学生会竞选演讲稿
2014/08/25 职场文书
超市七夕促销活动方案
2014/08/28 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
高中同学会致辞
2015/08/01 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书
pycharm安装深度学习pytorch的d2l包失败问题解决
2022/03/25 Python
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android