<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .box {
        width: 100px;
        height: 100px;
        background-color: red;
        position: absolute;
        top: 0;
        cursor: pointer;
      }
      .left {
        left: 0;
      }
      .right {
        right: 0;
      }
    </style>
  </head>
  <body>
    <div id="div1" class="box left"></div>
    <div id="div2" class="box right"></div>
    <script>
      // 父类
      class Drag {
        constructor(id) {
          this.oDiv = document.querySelector(id);
          this.disX = 0;
          this.disY = 0;
          this.init();
        }
        init() {
          this.oDiv.onmousedown = function (ev) {
            this.disX = ev.clientX - this.oDiv.offsetLeft;
            this.disY = ev.clientY - this.oDiv.offsetTop;

            document.onmousemove = this.fnMove.bind(this);
            document.onmouseup = this.fnUp.bind(this);

            return false;
          }.bind(this);
        }
        fnMove(ev) {
          this.oDiv.style.left = ev.clientX - this.disX + "px";
          this.oDiv.style.top = ev.clientY - this.disY + "px";
           // 限制范围
          if (this.oDiv.offsetLeft <= 0) {
            this.oDiv.style.left = 0;
          }else if(this.oDiv.offsetTop <= 0){
            this.oDiv.style.top = 0;
          }
        }
        fnUp() {
          document.onmousemove = null;
          document.onmouseup = null;
        }
      }
      // 子类 —— 限制范围
      class LimitDrag extends Drag {
        fnMove(ev) {
          super.fnMove(ev);
        }
      }
      // 调用
      new Drag("#div1");
      new LimitDrag("#div2");
    </script>
  </body>
</html>

 

posted on 2020-09-12 12:45  颉旺飞  阅读(185)  评论(0编辑  收藏  举报