zoukankan      html  css  js  c++  java
  • 关于完美拖拽的问题一

    1、完美拖拽的思想,具体可以分为:

    ①计算出鼠标在div的位置,方法为X轴event.clientX-oDiv.offsetLeft;Y轴event.clientY-oDiv.offsetTop;

    ②计算出鼠标move时候鼠标的X,Y轴,再减去鼠标在div的位置,就是div移动的top和left值

    ③清除默认事件,ff和chrome可以用return false IE有专用的setCapture() (让本页面所有的事件都集中到一起,例如集中到div上,这样可以防止拖拽的时候文字被选中) 记得鼠标释放的时候要releaseCapture();

    ④尽量简化代码,把一样的代码放到一个函数里

    这样你就做出了一个兼容各种浏览器的完美拖拽代码:

    <!doctype html>
    <html lang="en">
     <head>
      <meta charset="UTF-8">
      <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0'/>
      <title>拖拽</title>
      <style>
      *{margin:0;padding:0;}
      #div1{width:100px; height:100px; position:absolute; background:red;cursor:move;overflow:hidden;}
      </style>
      <script>
      window.onload=function(){
        var oDiv=document.getElementById("div1");
        var disX=disY=0;    
        oDiv.onmousedown=function(event){
            var event=event||window.event;
            disX=event.clientX-oDiv.offsetLeft;
            disY=event.clientY-oDiv.offsetTop;
            if(oDiv.setCapture){
                oDiv.onmousemove=move;
                oDiv.onmouseup=up;
                oDiv.setCapture();
                return false;
            }else{
                document.onmousemove=move;
                document.onmouseup=up;
                return false;
            }    
        }
        function move(event){
            var event=event||window.event;
            var l=event.clientX-disX;
            var t=event.clientY-disY;
            if(l<0){
                l=0;
            }else if(l>document.documentElement.clientWidth-oDiv.offsetWidth){
                l=document.documentElement.clientWidth-oDiv.offsetWidth;
            }
            if(t<0){
                t=0;
            }else if(t>document.documentElement.clientHeight-oDiv.offsetHeight){
                t=document.documentElement.clientHeight-oDiv.offsetHeight;
            }
            oDiv.style.left=l+"px";
            oDiv.style.top=t+"px";
        }
        function up(){
            if(oDiv.releaseCapture){
                oDiv.releaseCapture();
            }
            this.onmousemove=null;
            this.onmouseup=null;
        }
      }
      </script>
     </head>
     <body>
        sfdsfcsdjkcjsdkljcksdjfk<br>
        asdjkxcvjixhvjdfjvbdfnvf<br>
        <div id="div1"></div>
     </body>
    </html>
  • 相关阅读:
    华为机试:字符串翻转
    华为机试:数字颠倒
    华为机试:字符个数统计
    华为机试:提取不重复的整数
    华为机试:取近视值
    华为机试:进制转换
    华为机试:字符串分隔
    华为机试:明明的随机数
    华为机试:字符串最后一个单词的长度
    网易:相反数
  • 原文地址:https://www.cnblogs.com/yuyu9988/p/3408211.html
Copyright © 2011-2022 走看看