一个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取消文本选定的实现代码
Nov 14 Javascript
js propertychange和oninput事件
Sep 28 Javascript
bootstrap布局中input输入框右侧图标点击功能
May 16 Javascript
浅谈JavaScript 覆盖原型以及更改原型
Aug 31 Javascript
浅谈js常用内置方法和对象
Sep 24 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
Jun 12 jQuery
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
Aug 23 jQuery
JS实现快递单打印功能【推荐】
Jun 21 Javascript
Vue实现底部侧边工具栏的实例代码
Sep 03 Javascript
玩转Koa之koa-router原理解析
Dec 29 Javascript
小程序外卖订单界面的示例代码
Dec 30 Javascript
vue实现移动端div拖动效果
Mar 03 Vue.js
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
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
JavaScript中DOM详解
2015/04/13 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
javascript每日必学之继承
2016/02/23 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
纯原生js实现table表格的增删
2017/01/05 Javascript
在vue中封装可复用的组件方法
2018/03/01 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
python求解数组中两个字符串的最小距离
2018/09/27 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
python实现大文本文件分割
2019/07/22 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
从python读取sql的实例方法
2020/07/21 Python
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
设计模式的基本要素是什么
2014/04/21 面试题
会计专业自我评价
2014/02/12 职场文书
党员2014两会学习心得体会
2014/03/17 职场文书
学习型班组申报材料
2014/05/31 职场文书
社会工作专业求职信
2014/07/15 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
国际贸易实训总结
2015/08/03 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
看看如何用Python绘制小米新版天价logo
2021/04/20 Python
浅谈react useEffect闭包的坑
2021/06/08 Javascript