`
javapolo
  • 浏览: 131579 次
  • 性别: 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()"
分享到:
评论

相关推荐

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

    百度地图API详解之事件机制,闭包机制,marker事件,信息窗口,叠加层

    2. **闭包机制**:在JavaScript中,闭包是一种特殊的函数,可以访问其自身作用域、外部函数作用域以及全局作用域的变量。在事件处理函数中,由于事件触发时可能在循环或其他上下文中,闭包用于保存和隔离变量的值,...

    js实现的跟随页面移动可拖动可关闭的在线客服代码.rar

    本压缩包提供的"js实现的跟随页面移动可拖动可关闭的在线客服代码"是利用JavaScript实现的一个实用功能,即一个可拖动、可关闭的在线客服窗口,它能跟随用户在页面上的滚动位置,提供实时的客户支持服务。...

    Jquery实现拖拽插件

    总结,通过利用jQuery的事件处理机制和DOM操作,我们可以轻松实现拖拽功能,而无需深入学习复杂的原生JavaScript拖放API。这个简单的拖拽插件可应用于各种场景,例如窗口拖放、图像拖放等,大大提高了开发效率。在...

    原生js Dialog对话框插件制作19种对话框弹出层拖动

    本主题将深入探讨如何使用原生JavaScript实现一个具备19种不同类型的对话框插件,同时支持对话框的拖动功能。我们将讨论以下几个关键知识点: 1. **DOM操作**: 在创建和管理对话框时,DOM操作是必不可少的。...

    开心农场 JS版

    "开心农场 JS版"是一个基于JavaScript的在线游戏项目,它模拟了现实生活中农场经营的场景,用户可以在虚拟的农场上种植、收获作物,饲养动物,体验农场生活。在这个项目中,JavaScript作为主要的编程语言,负责处理...

    Js拖动特效,一串水晶球(很强大).zip

    在本案例中,“Js拖动特效,一串水晶球(很强大).zip”是一个包含JavaScript实现的动态特效项目,其核心是模拟台球游戏中的杆击效果,用户可以拖动球体,其他球体会根据物理规则进行反应,呈现出类似水晶球连锁反应的...

    前端拖拽布局框架.docx

    JavaScript的高级特性,如闭包、原型链、异步编程(Promise和async/await),对于优化拖拽布局框架的性能和用户体验至关重要。闭包可以实现数据的封装和私有化,原型链则用于实现对象的继承和方法共享。在处理拖拽...

    JS面向对象编程实现的拖拽功能案例详解

    下面我们将详细讲解如何使用JS面向对象编程实现拖拽功能,并对比面向过程的实现方式。 首先,让我们回顾一下原始的面向过程实现。这段代码通过全局变量和事件监听器实现了拖动一个元素的效果。当鼠标按下时,记录...

    js实现拖拽元素选择和删除

    【JavaScript实现拖拽元素选择与删除详解】 在网页交互中,拖放功能是一种常见的用户界面交互方式,使得用户可以通过简单的鼠标操作完成元素的选择和移动。本文将详细介绍如何使用JavaScript实现拖拽元素的选择以及...

    毕业设计-基于JavaScript的cesium可视化系统实现

    【标题】:“毕业设计-基于JavaScript的cesium可视化系统实现” 【内容】: 在现代Web开发中,JavaScript作为主要的前端开发语言,被广泛应用于构建交互式和动态的网页应用。本毕业设计聚焦于利用JavaScript结合...

    div拖拽插件——JQ.MoveBox.js(自制JQ插件)

    JQ.MoveBox.js是一个简易的拖拽插件示例,它不仅展示了如何使用jQuery实现拖拽效果,还涵盖了如何制作一个基本的jQuery插件。通过阅读和理解这个插件的代码,开发者可以学习到如何通过原生JavaScript和jQuery来实现...

    前端拖拽布局框架.pdf

    在前端开发中,拖拽布局框架是实现用户交互和动态界面设计的重要工具。这些框架允许用户通过简单的拖放操作来调整元素的位置和大小,从而创建个性化的布局。本文将主要探讨与前端拖拽布局框架相关的HTML、CSS以及...

    jquery拖拽排序插件.zip

    在拖动过程中,插件会实时更新元素的位置,以实现拖拽效果。同时,它可以修改拖动元素的样式,以视觉上突出显示正在拖动的状态。 当拖动到目标位置时,插件会触发特定的事件,并可能根据需求改变目标位置的样式,...

    JS课程XMind.rar_jsxmind -baijiahao_js总结xmind_xmind web开发_xmind前端js

    JavaScript(简称JS)是前端开发的核心技术之一,用于实现网页的动态效果和交互。jsxmind是基于JavaScript的开源思维导图工具,可以帮助开发者创建、编辑和分享思维导图。本教程将围绕JS基础、jsxmind的使用以及在...

    html5实现多图片上传预览(源码,已测试)

    在这个项目中,`jquery-1.7.2.js`可能用于简化DOM操作和事件处理,但HTML5的File API和拖放API主要依赖原生JavaScript实现。至于`control`和`core`两个文件夹,它们可能是额外的JavaScript库或工具,可能包含了对...

    前端拖拽布局框架大全.docx

    这些特效可以使用 JavaScript 库或框架来实现,例如 jQuery、React 等。 此外,还需要了解 JavaScript 的高级特征,例如函数、闭包、prototype 等。这些高级特征可以帮助开发者创建更加复杂的交互式应用程序。 三...

    JS联动8级代码

    为了实现8级JS联动,开发者需要有扎实的JavaScript基础,理解函数、对象、数组、闭包等概念,同时熟练掌握DOM API,如`getElementById`、`querySelector`、`addEventListener`等方法。此外,可能还需要了解Promise...

    html5&js;编写页面中国象棋

    - **事件处理**:JavaScript通过addEventListener或attachEvent等方法监听用户的点击、拖动等交互,实现棋子的选取和移动。 - **DOM操作**:Document Object Model (DOM)是HTML和XML文档的结构表示,JavaScript...

Global site tag (gtag.js) - Google Analytics