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

话不多说直接上代码
  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;
      }
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,007评论 25 709
  • 废话多说无益,直接上两张图片看效果,然后进入代码环节 准备阶段 1)找十张左右的大小差别不大的照片(最好120*1...
    蘩蕐皆成空阅读 6,046评论 3 9
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,392评论 2 17
  • 开学一周多了,每天孩子们6:30在我放的音乐声中起床,赖一会儿床,差不多6:50穿好衣服,7:00正式开始吃饭。...
    真峥阅读 1,126评论 1 1
  • Given a linked list, swap every two adjacent nodes and re...
    成江阅读 2,870评论 0 0

友情链接更多精彩内容