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

  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()"

时间: 2024-09-17 04:37:49

js实现拖拽 闭包函数详细介绍的相关文章

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

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

原生JS实现拖拽图片效果_javascript技巧

本文实例为大家讲解了JS实现拖拽图片效果的详细代码,分享给大家供大家参考,具体内容如下 javascript event 对象的clientX,offsetX,screenX,pageX的区别: 用html5的drag来实现拖拽有兼容性问题,使用拖拽插件代码又很多,而这个拖拽demo代码少,并且兼容所有浏览器,很值得在项目中使用, css样式如下: #div1{ width: 100px; height: 100px; background-color: #4D4D4D; position: a

Mysql字符串处理函数详细介绍、总结

 这篇文章主要介绍了Mysql字符串处理函数详细介绍.总结,需要的朋友可以参考下 一.简明总结 ASCII(char) 返回字符的ASCII码值 BIT_LENGTH(str) 返回字符串的比特长度 CONCAT(s1,s2-,sn)  将s1,s2-,sn连接成字符串 CONCAT_WS(sep,s1,s2-,sn) 将s1,s2-,sn连接成字符串,并用sep字符间隔 INSERT(str,x,y,instr) 将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果

java 在web project中的jsp中怎么用dropzone.js实现拖拽上传

问题描述 java 在web project中的jsp中怎么用dropzone.js实现拖拽上传 我现在想做一个拖拽上传,看别人说用dropzone.js!能做,想请大神解答!图片说明 解决方案 好了,自己解决了 ,谢谢各位 解决方案二: http://danielm.herokuapp.com/demos/dnd/image-preview.php http://download.csdn.net/download/u014166482/7753273

jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)_jquery

本文实例讲述了jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法.分享给大家供大家参考,具体如下: 该插件是文章作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的拖拽改变元素大小的效果,您可以根据自己的实际需求来设置被拖拽元素的最小宽高和最大宽高.整体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E

Js可拖拽放大的层拖动特效实现方法_javascript技巧

本文实例讲述了Js可拖拽放大的层拖动特效实现方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <!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&

JQuery-tableDnD 拖拽的基本使用介绍

本篇文章是对JQuery-tableDnD拖拽的基本使用进行了详细的分析介绍,需要的朋友参考下   在页面上导入js 复制代码 代码如下: jquery-1.3.2.min.js jquery.tablednd_0_5.js注意:一定要先导入jquery-1.3.2.min.js 否则出错. ·建table 复制代码 代码如下: <table id="table-1" cellspacing="0" cellpadding="2">

jQuery拖拽 &amp; 弹出层介绍与示例

 这篇文章主要介绍了jQuery拖拽 & 弹出层,有需要的朋友可以参考一下   iDrag & iDialog 介绍 特点: iDialog.js依赖于jquery编写的简单易用的对话框,同时还可以通过添加css3,改变对话框的展现动画.提供了两个方法:   •1.拖拽函数 iDrag() 或 $.drag(); •2.对话框函数 iDialog() 或 $.dialog();  跨平台兼容: 兼容:IE6+.Firefox.Chrome等主流浏览器(其它暂时没条件测试).并且IE6下也能

js实现拖拽效果(构造函数)_javascript技巧

一.利用构造函数模式进行开发的优势 1.业务逻辑思路更清晰: 2.避免了大量全局变量的产生,只有一个全局变量,相当于就是这一功能模块向外暴露的唯一接口:       3.如果结合模块化开发,很方便就可以把自定义的模块加到统一modules中,只要自定义的模块名不冲突,使用起来也不会互相干扰:       4.代码可维护性好,利人利己: 二.下面就利用这一模式,以拖拽为实例,进行讲解.1.html,如下: <body> <div class="box" id="