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 相关文章推荐
jQuery+jqmodal弹出窗口实现代码分明
Jun 14 Javascript
常用一些Javascript判断函数
Aug 14 Javascript
重写javascript中window.confirm的行为
Oct 21 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
Aug 02 Javascript
jQuery过滤选择器:not()方法使用介绍
Apr 20 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
Oct 14 Javascript
ajax级联菜单实现方法实例分析
Nov 28 Javascript
Vue shopCart 组件开发详解
Jan 26 Javascript
vue中element组件样式修改无效的解决方法
Feb 03 Javascript
浅谈ng-zorro使用心得
Dec 03 Javascript
js删除数组中某几项的方法总结
Jan 16 Javascript
elementUI Tree 树形控件的官方使用文档
Apr 25 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
使用adodb lite解决问题
2006/12/31 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
jQuery 阴影插件代码分享
2012/01/09 Javascript
jQuery中element选择器用法实例
2014/12/29 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
你知道setTimeout是如何运行的吗?
2016/08/16 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
2017/10/31 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
Python中处理字符串的相关的len()方法的使用简介
2015/05/19 Python
python字典基本操作实例分析
2015/07/11 Python
一份python入门应该看的学习资料
2018/04/11 Python
python中time库的实例使用方法
2019/10/31 Python
python的reverse函数翻转结果为None的问题
2020/05/11 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
美国羊皮公司:Overland
2018/01/15 全球购物
会计系毕业个人自荐信格式
2013/09/23 职场文书
优秀团员个人的自我评价
2013/10/02 职场文书
电子商务专业自荐信
2014/06/02 职场文书
党员倡议书
2015/01/19 职场文书
2015年个人思想总结
2015/03/09 职场文书
2015年乡镇扶贫工作总结
2015/04/08 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
Python Matplotlib库实现画局部图
2021/11/17 Python