zoukankan      html  css  js  c++  java
  • js拖拽效果的实现

    1、最基础的写法

     1 <!DOCTYPE HTML>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <title>无标题文档</title>
     6 <style>
     7 #div1 {width:200px; height:200px; background:yellow; position:absolute;}
     8 </style>
     9 <script>
    10 window.onload=function ()
    11 {
    12     var oDiv=document.getElementById('div1');
    13     
    14     oDiv.onmousedown=function (ev)
    15     {
    16         var oEvent=ev||event;
    17         
    18         var disX=oEvent.clientX-oDiv.offsetLeft;
    19         var disY=oEvent.clientY-oDiv.offsetTop;
    20         
    21         document.onmousemove=function (ev)
    22         {
    23             var oEvent=ev||event;
    24             
    25             oDiv.style.left=oEvent.clientX-disX+'px';
    26             oDiv.style.top=oEvent.clientY-disY+'px';
    27         };
    28         
    29         document.onmouseup=function ()
    30         {
    31             document.onmousemove=null;
    32             document.onmouseup=null;
    33         };
    34     };
    35 };
    36 </script>
    37 </head>
    38 <body>
    39 <div id="div1"></div>
    40 </body>
    41 </html>

    2、相比较高级的写法

     1 <!DOCTYPE HTML>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <title>无标题文档</title>
     6 <style>
     7 #div1 {width:200px; height:200px; background:yellow; position:absolute;}
     8 </style>
     9 <script>
    10 var oDiv=null;
    11 var disX=0;
    12 var disY=0;
    13 
    14 window.onload=function ()
    15 {
    16     oDiv=document.getElementById('div1');
    17     
    18     oDiv.onmousedown=fnDown;
    19 };
    20 
    21 function fnDown(ev)
    22 {
    23     var oEvent=ev||event;
    24     
    25     disX=oEvent.clientX-oDiv.offsetLeft;
    26     disY=oEvent.clientY-oDiv.offsetTop;
    27     
    28     document.onmousemove=fnMove;
    29     document.onmouseup=fnUp;
    30 }
    31 
    32 function fnMove(ev)
    33 {
    34     var oEvent=ev||event;
    35     
    36     oDiv.style.left=oEvent.clientX-disX+'px';
    37     oDiv.style.top=oEvent.clientY-disY+'px';
    38 }
    39 
    40 function fnUp()
    41 {
    42     document.onmousemove=null;
    43     document.onmouseup=null;
    44 }
    45 </script>
    46 </head>
    47 
    48 <body>
    49 <div id="div1"></div>
    50 </body>
    51 </html>

    3、

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    <style>
    #div1 {width:200px; height:200px; background:yellow; position:absolute;}
    #div2 {width:200px; height:200px; background:green; position:absolute;}
    </style>
    <script src="Drag.js"></script>
    <script src="LimitDrag.js"></script>
    <script>
    window.onload=function ()
    {
        new Drag('div1');
        new LimitDrag('div2');
    };
    </script>
    </head>
    
    <body>
    <div id="div1">普通拖拽</div>
    <div id="div2">限制范围</div>
    </body>
    </html>

    Dray.js

     1 function Drag(id)
     2 {
     3     var _this=this;
     4     this.disX=0;
     5     this.disY=0;
     6     
     7     this.oDiv=document.getElementById(id);
     8     this.oDiv.onmousedown=function (ev)
     9     {
    10         _this.fnDown(ev);
    11         
    12         return false;
    13     };
    14 };
    15 
    16 Drag.prototype.fnDown=function (ev)
    17 {
    18     var _this=this;
    19     var oEvent=ev||event;
    20     
    21     this.disX=oEvent.clientX-this.oDiv.offsetLeft;
    22     this.disY=oEvent.clientY-this.oDiv.offsetTop;
    23     
    24     document.onmousemove=function (ev)
    25     {
    26         _this.fnMove(ev);
    27     };
    28     document.onmouseup=function ()
    29     {
    30         _this.fnUp();
    31     };
    32 };
    33 
    34 Drag.prototype.fnMove=function (ev)
    35 {
    36     var oEvent=ev||event;
    37     
    38     this.oDiv.style.left=oEvent.clientX-this.disX+'px';
    39     this.oDiv.style.top=oEvent.clientY-this.disY+'px';
    40 };
    41 
    42 Drag.prototype.fnUp=function ()
    43 {
    44     document.onmousemove=null;
    45     document.onmouseup=null;
    46 };

    LimitDrag.js

     1 function LimitDrag(id)
     2 {
     3     Drag.call(this, id);    //继承属性
     4 }
     5 
     6 for(var i in Drag.prototype)
     7 {
     8     LimitDrag.prototype[i]=Drag.prototype[i];
     9 }
    10 
    11 LimitDrag.prototype.fnMove=function (ev)
    12 {
    13     var oEvent=ev||event;
    14     var l=oEvent.clientX-this.disX;
    15     var t=oEvent.clientY-this.disY;
    16     
    17     if(l<0)
    18     {
    19         l=0;
    20     }
    21     else if(l>document.documentElement.clientWidth-this.oDiv.offsetWidth)
    22     {
    23         l=document.documentElement.clientWidth-this.oDiv.offsetWidth;
    24     }
    25     
    26     this.oDiv.style.left=l+'px';
    27     this.oDiv.style.top=t+'px';
    28 };
  • 相关阅读:
    关于WinForm控件在asp.net中应用的问题。
    评“SuperMap Objects"
    news about matlab r2006a
    one good website for opensource
    a WebSite for MapXtreme2005 Crack
    Asp.net RegularExpressionValidator 控件验证输入值验证输入值是否匹配正则表达式指定的模式
    EditPlus配置手记
    关于asp.net中页面事件加载的先后顺序
    Jquery汇总
    JavaScript必看资源
  • 原文地址:https://www.cnblogs.com/jkr666666/p/6696908.html
Copyright © 2011-2022 走看看