• JS—实现拖拽


    JS中的拖拽示例:
        1)实现拖拽思路:当鼠标按下和拖拽过程中,鼠标与拖拽物体之间的相对距离保持不变
        2)实现拖拽遇到的问题:
            问题1:当鼠标按下移动过快时,离开了拖拽的物体时,这时拖拽物体将不再随着鼠标移动
                    因为拖拽的div太小了,这时我们可以将在拖拽物体上的mousemove事件放到document上面
                    同时将mouseup也改为document上面的事件
                    IE下直接用obj.setCapture()即可解决,但要做三个浏览器的兼容问题
            问题2:在FF中第二次拖拽,空div的Bug
                    解决方法:在mousedown函数上面添加阻止默认行为即可:return false;
            问题3:会出现将div脱出浏览器窗口的情况,用户体验不好
                    解决方法:限制div的拖动范围
            问题4:对于图片拖拽--阻止默认事件return false
            问题5:当拖拽图片或者div时,经过其他文字时,会出现文字选中
                解决方法:
                    1.阻止默认事件return false
                        --return false为新版浏览器FF,Chrome,IE9-11阻止了这个问题,但是IE8以下却不行
                    2.IE下解决拖拽时文字选中问题--用事件捕获(只写IE下认识的事件),要解决兼容问题

        3)事件捕获:只有IE识别
            obj.setCapture()--作用是将整个网页中所有的事件集中在某个对象上,即网页中的其他对象不能获得事件
            obj.releaseCapture()--解除事件捕获

    示例1:拖拽1,不拖出对象的父级dragDiv

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4   <meta charset="UTF-8">
     5   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     6   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     7   <title>Document</title>
     8   <style media="screen">
     9     #dragDiv{
    10       400px;
    11       height: 400px;
    12       background: #ccc;
    13       position: relative;
    14       margin: 20px;
    15     }
    16     #drag{
    17        100px;
    18       height: 100px;
    19       background: red;
    20       position: absolute;
    21     }
    22   </style>
    23 </head>
    24 <body>
    25   <div id="dragDiv">
    26         11111111111111111111
    27         <div id="drag">拖拽2-有范围拖拽</div>
    28     </div>
    29 
    30 
    31   <script type="text/javascript">
    32     window.onload=function(){
    33       //拖拽,不拖出对象的父级dragDiv
    34           var oDragDiv=document.getElementById('dragDiv');
    35           var oDrag=document.getElementById('drag');
    36           oDrag.onmousedown=function(ev){
    37               var oEvent=ev||event;
    38               var pos=getMousePosition(oEvent);
    39               var disX=pos.x-oDrag.offsetLeft;
    40               var disY=pos.y-oDrag.offsetTop;
    41               if(oDrag.setCapture){
    42                   //兼容IE7-11
    43                   oDrag.onmousemove=Mousemove;
    44                   oDrag.onmouseup=mouseUp;
    45                   oDrag.setCapture();
    46               }else{
    47                   //兼容FF,Chrome
    48                   document.onmousemove=Mousemove;
    49                   document.onmouseup=mouseUp;
    50               }
    51 
    52               function getMousePosition(ev){
    53                   var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
    54                   var scrollLeft=document.documentElement.scrollLeft||document.body.scrollLeft;
    55                   return {x:ev.clientX+scrollLeft,y:ev.clientY+scrollTop};
    56               };
    57               //合并代码
    58               function Mousemove(ev){
    59                   var oEvent=ev||event
    60                   var pis=getMousePosition(oEvent);
    61                   var l=pis.x-disX;
    62                   var t=pis.y-disY;
    63 
    64                   //限制范围,磁性吸附,快接近父级时,自动吸附上去
    65                   if (l<30) {
    66                       l=0;
    67                   }else if(l>oDragDiv.offsetWidth-oDrag.offsetWidth){
    68                       l=oDragDiv.offsetWidth-oDrag.offsetWidth;
    69                   }
    70                   if (t<30) {
    71                       t=0;
    72                   }else if(t>oDragDiv.offsetHeight-oDrag.offsetHeight){
    73                       t=oDragDiv.offsetHeight-oDrag.offsetHeight;
    74                   }
    75                   oDrag.style.left=l+'px';
    76                   oDrag.style.top=t+'px';
    77               };
    78               function mouseUp(){
    79                   //当鼠标抬起时,mousemove/up清空
    80                   this.onmousemove=null;
    81                   this.onmouseup=null;
    82                   if (oDrag.releaseCapture) {
    83                       oDrag.releaseCapture();
    84                   }
    85               };
    86               return false;    //FF等高版本浏览器中阻止默认行为
    87           };
    88     }
    89   </script>
    90 </body>
    91 </html>

    示例2:带框的拖拽:

      1 <!DOCTYPE html>
      2 <html lang="en">
      3 <head>
      4   <meta charset="UTF-8">
      5   <meta name="viewport" content="width=device-width, initial-scale=1.0">
      6   <meta http-equiv="X-UA-Compatible" content="ie=edge">
      7   <title>Document</title>
      8   <style media="screen">
      9     #dragDiv1{
     10       400px;
     11       height: 400px;
     12       background: #ccc;
     13       position: relative;
     14       margin: 20px;
     15     }
     16     #drag1{
     17        100px;
     18       height: 100px;
     19       background: red;
     20       position: absolute;
     21     }
     22     .box{
     23           border: 1px dashed black;
     24           position: absolute;
     25       }
     26   </style>
     27 </head>
     28 <body>
     29   <div id="dragDiv1">
     30         11111111111111111111
     31         <div id="drag1">拖拽2-带框拖拽</div>
     32     </div>
     33 
     34 
     35   <script type="text/javascript">
     36     window.onload=function(){
     37       //拖拽3:结合DOM,带框的拖拽
     38       var oDragDiv1=document.getElementById('dragDiv1');
     39       var oDrag1=document.getElementById('drag1');
     40       oDrag1.onmousedown=function(ev){
     41         var oEvent=ev||event;
     42         var pos=getMousePosition(oEvent);
     43         var disX=pos.x-oDrag1.offsetLeft;
     44         var disY=pos.y-oDrag1.offsetTop;
     45         //定义拖出来的框
     46         var oBox=document.createElement('div');
     47         oBox.className='box';
     48         oBox.style.width=oDrag1.offsetWidth-2+'px';
     49         oBox.style.height=oDrag1.offsetHeight-2+'px';
     50         //每次拖动时,给虚框div的初始位置和红色实体初始位置相同,防止虚框闪动
     51         oBox.style.left=oDrag1.offsetLeft+'px';
     52         oBox.style.top=oDrag1.offsetTop+'px';
     53         oDragDiv1.appendChild(oBox);
     54         if(oBox.setCapture){
     55           //兼容IE7-11
     56           oBox.onmousemove=Mousemove;
     57           oBox.onmouseup=mouseUp;
     58           oBox.setCapture();
     59         }else{
     60           //兼容FF,Chrome
     61           document.onmousemove=Mousemove;
     62           document.onmouseup=mouseUp;
     63         }
     64 
     65         function getMousePosition(ev){
     66           var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
     67           var scrollLeft=document.documentElement.scrollLeft||document.body.scrollLeft;
     68           return {x:ev.clientX+scrollLeft,y:ev.clientY+scrollTop};
     69         };
     70         //合并代码
     71         function Mousemove(ev){
     72           var oEvent=ev||event
     73           var pis=getMousePosition(oEvent);
     74           var l=pis.x-disX;
     75           var t=pis.y-disY;
     76 
     77           //3.限制范围,磁性吸附,快接近父级时,自动吸附上去
     78           if (l<30) {
     79             l=0;
     80           }else if(l>oDragDiv1.offsetWidth-oBox.offsetWidth){
     81             l=oDragDiv1.offsetWidth-oBox.offsetWidth;
     82           }
     83           if (t<30) {
     84             t=0;
     85           }else if(t>oDragDiv1.offsetHeight-oBox.offsetHeight){
     86             t=oDragDiv1.offsetHeight-oBox.offsetHeight;
     87           }
     88           oBox.style.left=l+'px';
     89           oBox.style.top=t+'px';
     90         };
     91         function mouseUp(){
     92           //当鼠标抬起时,mousemove/up清空
     93           this.onmousemove=null;
     94           this.onmouseup=null;
     95           oDrag1.style.left=oBox.offsetLeft+'px';
     96           oDrag1.style.top=oBox.offsetTop+'px';
     97           oDragDiv1.removeChild(oBox);
     98           if (oBox.releaseCapture) {
     99             oBox.releaseCapture();
    100           }
    101         };
    102         return false;    //FF中阻止默认行为
    103       };
    104     }
    105   </script>
    106 </body>
    107 </html>

    示例3:拖拽实现自定义滚动条

      1 <!DOCTYPE html>
      2 <html lang="en">
      3 <head>
      4   <meta charset="UTF-8">
      5   <meta name="viewport" content="width=device-width, initial-scale=1.0">
      6   <meta http-equiv="X-UA-Compatible" content="ie=edge">
      7   <title>Document</title>
      8   <style media="screen">
      9   #scroll{
     10      500px;
     11     height: 20px;
     12     background: #ccc;
     13     position: relative;
     14     margin: 20px;
     15     border-radius: 3px;
     16   }
     17   #drag2{
     18      20px;
     19     height: 20px;
     20     background: red;
     21     border-radius: 3px;
     22     position: absolute;
     23   }
     24   #scrollCtrl{
     25      150px;
     26     height: 150px;
     27     filter: alpha(opacity:0);
     28     opacity: 0;
     29     background: green;
     30     margin: 20px;
     31   }
     32   #ctrlWords{
     33      300px;
     34     height: 400px;
     35     border: 1px solid #000;
     36     margin: 20px;
     37     position: relative;
     38     overflow: hidden;
     39   }
     40   #words{
     41     position: absolute;
     42     top: 0;
     43     left: 0;
     44   }
     45   </style>
     46 </head>
     47 <body>
     48   <div id="scroll">
     49         <div id="drag2"></div>
     50     </div>
     51     <div id="scrollCtrl"></div>
     52 
     53     <div id="ctrlWords">
     54         <div id="words">
     55       每天开心快乐的生活是我们每个人追求的目标,有人孜孜不倦,苦苦追寻,仍找不到快乐的影踪。有人默默不语,静静守候,快乐总是如期而至,伴其左右。
     56 
     57    一名记者到一个集市上采访,他看到一个年迈的老太太在一个角落里卖柠檬,“柠檬!柠檬!五毛钱一个!”老人有气无力地喊着,老太太的生意显然不太好,一上午也没卖几个。记者动了恻隐之心,打算把老太太的柠檬全部买下来,以使她能“高高兴兴地早些回家”。当他把自己的想法告诉老太太时,老太太的回答让他大吃一惊:“我现在都卖给你了,那我下午卖什么”。
     58 
     59    快乐对于这位老太太来说,就是踏踏实实的生活,体会身边发生的点滴事情。我们的眼睛有时会欺骗我们,我们认为该烦恼的人其实是快乐的,而我们以为会快乐的人却充满了烦恼。真实的生活,往往会给人们带来无穷乐趣,只要你懂得去感受,你一定会收获快乐。
     60 
     61    有一位为了金钱忙得焦头烂额而且并不快乐的爸爸问女儿:“你快乐吗?”女儿高兴地回答说:“快乐”。迷惑不解的爸爸说:“那什么是快乐呢?”女儿天真地回答说:”比如现在,我们都吃完了晚饭,你陪我在楼顶看星星,我感觉很快乐。”迷惑的爸爸一下子就清楚了自己不快乐的原因了。
     62 
     63    女孩的快乐如此简单,却是来自内心最真实的快乐。仔细体会,身边的一草一木,一花一叶,都能带给我们最纯真的快乐。心中平静喜悦,无论是仰望星空,还是低头赏花,是临水观鱼,还是听风赏雨,都是其乐无穷。
     64         </div>
     65     </div>
     66 
     67 
     68   <script type="text/javascript">
     69     window.onload=function(){
     70       //自定义滚动条
     71         var scroll=document.getElementById('scroll');
     72         var oDrag2=document.getElementById('drag2');
     73         var scrollCtrl=document.getElementById('scrollCtrl');
     74         var ctrlWords=document.getElementById('ctrlWords');
     75         var words=document.getElementById('words');
     76         oDrag2.onmousedown=function(ev){
     77             var oEvent=ev||event;
     78             var pos=getMousePosition(oEvent);
     79             var disX=pos.x-oDrag2.offsetLeft;
     80             if(oDrag2.setCapture){
     81                 //兼容IE7-11
     82                 oDrag2.onmousemove=Mousemove;
     83                 oDrag2.onmouseup=mouseUp;
     84                 oDrag2.setCapture();
     85             }else{
     86                 //兼容FF,Chrome
     87                 document.onmousemove=Mousemove;
     88                 document.onmouseup=mouseUp;
     89             }
     90 
     91             function getMousePosition(ev){
     92                 var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
     93                 var scrollLeft=document.documentElement.scrollLeft||document.body.scrollLeft;
     94                 return {x:ev.clientX+scrollLeft,y:ev.clientY+scrollTop};
     95             };
     96             //合并代码
     97             function Mousemove(ev){
     98                 var oEvent=ev||event
     99                 var pis=getMousePosition(oEvent);
    100                 var l=pis.x-disX;
    101 
    102                 //3.限制范围
    103                 if (l<0) {
    104                     l=0;
    105                 }else if(l>scroll.offsetWidth-oDrag2.offsetWidth){
    106                     l=scroll.offsetWidth-oDrag2.offsetWidth;
    107                 }
    108                 oDrag2.style.left=l+'px';
    109                 //百分数scale0-100%
    110                 var scale=l/(scroll.offsetWidth-oDrag2.offsetWidth);
    111                 scrollCtrl.style.filter='alpha(opacity:'+scale*100+')';
    112                 scrollCtrl.style.opacity=scale;
    113                 words.style.top=-scale*(words.offsetHeight-ctrlWords.offsetHeight)+'px';
    114             };
    115             function mouseUp(){
    116                 //当鼠标抬起时,mousemove/up清空
    117                 this.onmousemove=null;
    118                 this.onmouseup=null;
    119                 if (oDrag2.releaseCapture) {
    120                     oDrag2.releaseCapture();
    121                 }
    122             };
    123             return false;    //FF中阻止默认行为
    124         };
    125     }
    126   </script>
    127 </body>
    128 </html>
  • 相关阅读:
    让ASP.NET MVC页面返回不同类型的内容
    在 ASP.NET MVC 中使用 HTTPS (SSL/TLS)
    BrnMall多店版网上商城正式发布
    Brn系列网上商城发布指南
    CSS和SVG中的剪切——clip-path属性和<clipPath>元素
    C#实现调用Java类中方法
    WCF 第五章 会话级别的实例
    细说 ASP.NET Cache 及其高级用法
    C#使用SOAP调用Web Service
    JAVA与.NET的相互调用——利用JNBridge桥接模式实现远程通讯
  • 原文地址:https://www.cnblogs.com/yufann/p/JS-Summary9.html
Copyright © 2020-2023  润新知