js实现拖拽 闭包函数详细介绍


Posted in Javascript onNovember 25, 2012

js拖拽

采用简单的闭包实现方式

/** 
* Created with JetBrains WebStorm. 
* User: lsj 
* Date: 12-11-24 
* Time: 下午12:59 
* To change this template use File | Settings | File Templates. 
*/ 
var dragmanager=(function() 
{ 
//标识移动元素z轴坐标 
var index_z=1; 
//当前的拖拽元素 
var drganow; 
//移动标识符号 
var dragbegin=false; 
//鼠标点击时距离div左边距离 
var relativex=0; 
//鼠标点击时距离div上边距离 
var relativey=0; 
//标识鼠标是否移出 
var isout=false; 
return { 
/** 
* 为document绑定鼠标提起事件,主要防止鼠标移动过快跳出el区域 
*/ 
bingDocOnMouseUp:function() 
{ 
//注册全局的onmouseup事件,主要防止鼠标移动过快导致鼠标和el不同步 
document.onmouseup=function(e) 
{ 
var ev = window.event || e; 
if(isout && dragbegin) 
{ 
//改变div的相对位置 
drganow.style.left= (ev.clientX-relativex)+'px'; 
drganow.style.top=(ev.clientY-relativey)+'px'; 
drganow.style.cursor='normal'; 
dragbegin=false; 
isout=false; 
} 
} 
}, 
/** 
* 将注入的元素绑定事件 
* @param el 
*/ 
registerElementEv:function(element) 
{ 
element.onmousedown=function(e) 
{ 
var ev = window.event || e; 
var clientx=ev.clientX; 
var clienty= ev.clientY; 
var left= parseInt(this.style.left.substring(0, this.style.left.indexOf("p"))); 
var top= parseInt(this.style.top.substring(0, this.style.top.indexOf("p"))); 
relativex=clientx-left; 
relativey=clienty-top; 
index_z++; 
this.style.zIndex=index_z; 
drganow=this; 
dragbegin=true; 
} 
element.onmousemove=function(e) 
{ 
var ev = window.event || e; 
//开始拖拽 
if(dragbegin) 
{ 
//改变div的相对位置 
this.style.left= (ev.clientX-relativex)+'px'; 
this.style.top=(ev.clientY-relativey)+'px'; 
this.style.cursor='move'; 
} 
} 
element.onmouseout=function(e) 
{ 
isout=true; 
} 
element.onmouseup=function(e) 
{ 
var ev = window.event || e; 
if(dragbegin) 
{ 
//改变div的相对位置 
drganow.style.left= (ev.clientX-relativex)+'px'; 
drganow.style.top=(ev.clientY-relativey)+'px'; 
drganow.style.cursor='normal'; 
dragbegin=false; 
} 
} 
} 
} 
})();

1.采用闭包的形式实现 ,方便后期的维护,将移动过程所需的变量全部转移进gridmanager里面
2.拖拽过程中 鼠标移动过快导致移动元素跟不上鼠标的移动,所以要注册document.oumouseup事件,该事件的开关是有移动元素的onmouseout事件触发的
3.拖拽的过程中可能会触发浏览器自身的onmousemove的select事件,可以进行屏蔽ie下是onmousemove="document.selection.empty()"
Javascript 相关文章推荐
在网页里看flash的trace数据的js类
Jan 10 Javascript
了解jQuery技巧来提高你的代码
Jan 08 Javascript
window.location.hash 属性使用说明
Mar 20 Javascript
重构Javascript代码示例(重构前后对比)
Jan 23 Javascript
jQuery随便控制任意div隐藏的方法
Jun 28 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
Nov 25 Javascript
基于JavaScript怎么实现让歌词滚动播放
Nov 03 Javascript
js封装tab标签页实例分享
Dec 19 Javascript
angularjs 动态从后台获取下拉框的值方法
Aug 13 Javascript
vue移动端微信授权登录插件封装的实例
Aug 28 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
Apr 22 Javascript
JavaScript事件委托实现原理及优点进行
Aug 29 Javascript
jquery miniui 教程 表格控件 合并单元格应用
Nov 25 #Javascript
JavaScript mapreduce工作原理简析
Nov 25 #Javascript
jquery div 居中技巧应用介绍
Nov 24 #Javascript
js实现在文本框光标处添加字符的方法介绍
Nov 24 #Javascript
js获取TreeView控件选中节点的Text和Value值的方法
Nov 24 #Javascript
js 连接数据库如何操作数据库中的数据
Nov 23 #Javascript
js 如何实现对数据库的增删改查
Nov 23 #Javascript
You might like
php+oracle 分页类
2006/10/09 PHP
中篇:安装及配置PHP
2006/12/13 PHP
Cakephp 执行主要流程
2010/03/24 PHP
php中Smarty模板初体验
2011/08/08 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
php session 写入数据库
2016/02/13 PHP
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
JavaScript中获取元素索引的函数
2010/09/10 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
两种不同的方法实现js对checkbox进行全选和反选
2014/05/13 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
2016/09/05 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
Js中使用正则表达式验证输入是否有特殊字符
2018/09/07 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
Python深入学习之装饰器
2014/08/31 Python
线程和进程的区别及Python代码实例
2015/02/04 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
python线程join方法原理解析
2020/02/11 Python
如何用Python绘制3D柱形图
2020/09/16 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
力学专业毕业生自荐信
2013/11/17 职场文书
《北京的春节》教学反思
2014/04/07 职场文书
大学生个人求职信
2014/06/02 职场文书
手术室护士个人总结
2015/02/13 职场文书
城南旧事电影观后感
2015/06/16 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书