• DOM元素拖拽效果


     

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <style>
    div{width:200px;height:200px;background:black;position:absolute;top:0;left:0;}
    </style>
    </head>
    <body>
    <div id="div"></div>
    <script>
    window.onload=function()
    {
      var oDiv=document.getElementById('div');
      var disX=0;
      var disY=0;
      oDiv.onmousedown=function(ev) //鼠标按下DIV
      {
        var oEvent=ev||event;
        disX=oEvent.clientX-oDiv.offsetLeft; //鼠标的X坐标减去DIV的左边距就等于disX, 这个disXs是用于确定鼠标移动DIV时鼠标点和DIV之间的左面距离,这个距离是不会变的,通过这个新鼠标的X坐标减去disX就是DIV的Left
        disY=oEvent.clientY-oDiv.offsetTop; //鼠标的Y坐标减去DIV的左边距就等于disY, 这个disY是用于确定鼠标移动DIV时鼠标点和DIV之间的上面距离,这个距离是不会变的,通过这个新鼠标的Y坐标减去disY就是DIV的Top
        document.onmousemove=function(ev) //为了防止鼠标移动太快而离开了DIV产生了bug,所以要给整个页面加onmousemove事件
        {
          var oEvent=ev||event;
          var oLeft=oEvent.clientX-disX; //新鼠标X坐标减去disX,也就是鼠标移动DIV后的Left
          var oTop=oEvent.clientY-disY; //新鼠标Y坐标减去disY,也就是鼠标移动DIV后的Top
          if(oLeft<0) //当DIV的Left小于0,也就是移出左边
          {
            oLeft=0; //就把DIV的Left设置为0,就不能移出左边
          }
          else if(oLeft>document.documentElement.clientWidth-oDiv.offsetWidth) //屏幕宽度减去DIV的宽度就得出了DIV到达最右边的宽度,如果Left大于这个像素
          {
            oLeft=document.documentElement.clientWidth-oDiv.offsetWidth; //就把Left设置为这个像素
          }
          if(oTop<0) //当DIV的To小于0,也就是移出左边
          {
            oTop=0; //就把DIV的Top设置为0,就不能移出上边
          }
          else if(oTop>document.documentElement.clientHeight-oDiv.offsetHeight) //屏幕高度减去DIV的高度就得出了DIV到达最下面边的像素,如果Top大于这个像素
          {
            oTop=document.documentElement.clientHeight-oDiv.offsetHeight; //就把Top设置为这个像素
          }
          oDiv.style.left=oLeft+'px'; //DIV的Left设置为新鼠标X坐标减去disX的值
          oDiv.style.top=oTop+'px'; //DIV的Top设置为新鼠标Y坐标减去disY的值
        };
        document.onmouseup=function() //鼠标松开时
        {
          document.onmousemove=null; //把鼠标移动清楚
          document.onmouseup=null; //把鼠标松开清楚
        };
        return false; //阻止FireFox的默认事件 bug
      };
    };
    </script>
    </body>
    </html>

     

     

  • 相关阅读:
    LeetCode 1447. Simplified Fractions
    LeetCode 717. 1bit and 2bit Characters
    LeetCode 1725. Number Of Rectangles That Can Form The Largest Square
    LeetCode 2016. Maximum Difference Between Increasing Elements
    LeetCode 二叉树遍历算法题解 All In One
    Top Universities in China Open Source Course Materials All In One
    SQL 查询语句: 字符串正则匹配 All In One
    React memo & useMemo All In One All In One
    webpack 性能优化 All In One
    漫画教程: HTTPS 的工作原理 (中文版)All In One
  • 原文地址:https://www.cnblogs.com/zx192664369/p/6501525.html
Copyright © 2020-2023  润新知