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 相关文章推荐
javascript上传图片前预览图片兼容大多数浏览器
Oct 25 Javascript
javascript 获取浏览器版本
Jan 21 Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
Nov 30 Javascript
easyui validatebox验证
Apr 29 Javascript
javascript类型系统——undefined和null全面了解
Jul 13 Javascript
JQueryEasyUI之DataGrid数据显示
Nov 23 Javascript
微信小程序之拖拽排序(代码分享)
Jan 21 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
Mar 03 Javascript
原生JS实现左右箭头选择日期实例代码
Mar 14 Javascript
原生js实现简单的Ripple按钮实例代码
Mar 24 Javascript
详解ES6 Symbol 的用途
Oct 14 Javascript
vue中get请求如何传递数组参数的方法示例
Nov 08 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 curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
js 自定义的联动下拉框
2010/02/07 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
通过隐藏iframe实现文件下载的js方法介绍
2014/02/26 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
JavaScript、jQuery与Ajax的关系
2016/01/24 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
node.js操作mysql简单实例
2017/05/25 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
JS实现的base64加密解密操作示例
2018/04/18 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
2018/07/24 jQuery
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
layui的select联动实现代码
2019/09/28 Javascript
微信小程序实现自定义底部导航
2020/11/18 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
keras实现VGG16方式(预测一张图片)
2020/07/07 Python
python爬取代理ip的示例
2020/12/18 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
Python如何实现单例模式
2016/06/03 面试题
高中生的自我评价
2014/03/04 职场文书
晨会主持词
2014/03/17 职场文书
2014年党支部学习材料
2014/05/19 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
大连星海广场导游词
2015/02/10 职场文书
欠款起诉书范文
2015/05/19 职场文书
高三教师工作总结2015
2015/07/21 职场文书
创业计划书之便利店
2019/09/05 职场文书
python入门学习关于for else的特殊特性讲解
2021/11/20 Python
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang
Python获取字典中某个key的value
2022/04/13 Python