`
javapolo
  • 浏览: 130138 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

js拖拽 简单闭包实现

    博客分类:
  • 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()"
分享到:
评论

相关推荐

    深入理解javascript原型和闭包

    深入理解javascript原型和闭包(01)——一切都是对象 深入理解javascript原型和闭包(02)——函数和对象的关系

    JavaScript利用闭包实现模块化

    本文主要介绍了JavaScript利用闭包实现模块化的方法。具有一定的参考价值,下面跟着小编一起来看下吧

    JavaScript闭包函数

    闭包是ECMAScript (JavaScript)最强大的特性之一,但用好闭包的前提是必须理解闭包。闭包的创建相对容易,人们甚至会在不经意间创建闭包,但这些无意创建的闭包却存在潜在的危害,尤其是在比较常见的浏览器环境下...

    js闭包理解之倒计时

    网上大多只是讲解js闭包的大概意思和小例子,但真实用于项目中又该怎么用呢。这个例子真实的告诉大家在项目中的用法

    JS闭包经典

    闭包一点即通 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。

    javascript 闭包

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。

    JS匿名函数、闭包

    即使JavaScript中没有正式的私有对象属性的概念,但可以使用闭包来实现公有方法,而通过公有方法可以访问在包含作用域中定义的变量; 有权访问私有变量的公有方法叫做特权方法; 可以使用构造函数模式、原型模式...

    理解_JavaScript_闭包

    本文结合 ECMA 262 规范详解了闭包的内部工作机制,让 JavaScript 编程人员对闭包的理解从“嵌套的函数”深入到“标识符解析、执行环境和作用域链”等等 JavaScript 对象背后的运行机制当中,真正领会到闭包的实质。

    C语言实现三种闭包算法(传递,自反,对称闭包)

    C语言实现三种闭包算法,能够实现传递,自反,对称闭包

    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 ...

    JS中的闭包理解。。。。。。。。

    js闭包 • 每个函数都有一个包含词法环境的执行上下文,它的词法环境确定了函数内的变量赋值以及对外部环境的引用。看上去函数“记住”了外部环境,但其实上是这个函数有个指向外部环境的引用。这就是“闭包”的...

    Javascript 闭包完整解释

    Javascript 闭包完整解释

    Swift语言利用Closure闭包实现反向传值Demo

    本Demo采用Swift语言利用Closure闭包实现两个视图控制器的反向传值,和OC中的Blocks类似,但有些区别。

    尚硅谷——JavaScript闭包

    JavaScript闭包 JavaScript闭包 JavaScript闭包 JavaScript闭包

    js闭包详细讲解

    js闭包的详细讲解

    闭包实现ztree增删改查

    以闭包的形式设计实现ztree增删改查,提高节点的查询以及操作,包括对节点排序操作,仅供参考,希望给需要的朋友带来帮助,谢谢支持!

    JS实现闭包中的沙箱模式示例

    主要介绍了JS实现闭包中的沙箱模式,结合实例形式分析了闭包模块化实现沙箱模式的原理、步骤与相关操作技巧,需要的朋友可以参考下

    js闭包个人理解

    js闭包的个人理解

    JS闭包可被利用的常见场景

    JS闭包可被利用的常见场景。值得保留的文档。值得一看

    深入理解javascript原型和闭包.pdf

    javascript原型和闭包

Global site tag (gtag.js) - Google Analytics