美文网首页
原生js实现一个拖拽,带过界判断。

原生js实现一个拖拽,带过界判断。

作者: sdcV | 来源:发表于2017-07-26 19:31 被阅读9次
    话不多说直接上代码
      div class="calculator" id="drag"></div> //html代码
      .calculator {  //样式代码
          position: absolute;
          /*设置绝对定位,脱离文档流,便于拖拽*/
          display: block;
          width: 100px;
          height: 100px;
          background-color: #d6655c;
          cursor: move;
         /*鼠标呈拖拽状*/
    }
    

      var drag = document.getElementById('drag');
      //点击某物体时,用drag对象即可,move和up是全局区域,也就是整个文档通用,应该使用document对象而不是drag对象
      drag.onmousedown = function(e) {
          var e = e || window.event;
          var diffX = e.clientX - drag.offsetLeft;//鼠标按下那一刻相对于物体左侧边框的距离=点击时的位置相对于浏览器最左边的距离-物体左边框相对于浏览器最左边的距离 
          var diffY = e.clientY - drag.offsetTop;//同理计算距相对上边框位置
    
          document.onmousemove = function(e) {
              var e = e || window.event;
              var left = e.clientX - diffX;//计算左边距
              var top = e.clientY - diffY; //计算右边距
    
              if (left < 0) {  //过界判断
                  left = 0; //从左边移出浏览器窗口
              } else if (left > window.innerWidth - drag.offsetWidth) {
                  left = window.innerWidth - drag.offsetWidth;//从右边移出浏览器窗口
              }
              if (top < 0) {
                  top = 0; //从上边移出浏览器窗口
              } else if (top > window.innerHeight - drag.offsetHeight) {
                  top = window.innerHeight - drag.offsetHeight;  //从下面移出浏览器窗口
              }
    
              drag.style.left = left + 'px';
              drag.style.top = top + 'px';
          }
    
          document.onmouseup = function(e) { //移除事件,让物体停下
              this.onmousemove = null;
              this.onmouseup = null;
          }
      }

    相关文章

      网友评论

          本文标题:原生js实现一个拖拽,带过界判断。

          本文链接:https://www.haomeiwen.com/subject/pmmokxtx.html