js实现拖拽

js实现拖拽

实现方式

mousedownmousemovemouseup 拖着目标元素在页面任意位置
如果要设置物体拖拽,那么必须使用三个事件,并且这三个事件的使用顺序不能颠倒。

  1. onmousedown:鼠标按下事件
  2. onmousemove:鼠标移动事件
  3. onmouseup:鼠标抬起事件

重点:

1、一定要绝对定位,脱离文档流才可以移动。
2、绑定拖拽的元素,移动和鼠标松开后是对document的绑定,因为移动的是整个div。
3、点击:a= 获取当前鼠标坐标、b =div距浏览器距离、c = 鼠标在div内部距离=a-b。

移动: 通过a - c 建立鼠标与div的关系,防止鼠标超出div。

基本思路:

 拖拽状态 = 0鼠标在元素上按下的时候{ 

 拖拽状态 = 1 

 记录下鼠标的x和y坐标 

 记录下元素的x和y坐标 

 } 

 鼠标在元素上移动的时候{ 

 如果拖拽状态是0就什么也不做。 

 如果拖拽状态是1,那么 

 元素y = 现在鼠标y - 原来鼠标y + 原来元素y 

 元素x = 现在鼠标x - 原来鼠标x + 原来元素x 

 } 

 鼠标在任何时候放开的时候{ 

 拖拽状态 = 0 

 }

代码

<div class="box" id="drag"></div>
.box {
    position: absolute;
    width: 100px;
    height: 100px;
    background: red;
    cursor: move;
}
    window.onload = function () {
    var drag = document.getElementById('drag');
    // //点击某物体时,用drag对象即可,move和up是全局区域,
    // 也就是整个文档通用,应该使用document对象而不是drag对象(否则,采用drag对象时物体只能往右方或下方移动)  
    drag.onmousedown = function (event) {
        var event = event || window.event;  //兼容IE浏览器
        //    鼠标点击物体那一刻相对于物体左侧边框的距离=点击时的位置相对于浏览器最左边的距离-物体左边框相对于浏览器最左边的距离
        var diffX = event.clientX - drag.offsetLeft;
        var diffY = event.clientY - drag.offsetTop;
        if (typeof drag.setCapture !== 'undefined') {
            drag.setCapture();
        }
        document.onmousemove = function (event) {
            var event = event || window.event;
            var moveX = event.clientX - diffX;
            var moveY = event.clientY - diffY;
            if (moveX < 0) {
                moveX = 0
            } else if (moveX > window.innerWidth - drag.offsetWidth) {
                moveX = window.innerWidth - drag.offsetWidth
            }
            if (moveY < 0) {
                moveY = 0
            } else if (moveY > window.innerHeight - drag.offsetHeight) {
                moveY = window.innerHeight - drag.offsetHeight
            }
            drag.style.left = moveX + 'px';
            drag.style.top = moveY + 'px'
        }
        document.onmouseup = function (event) {
            this.onmousemove = null;
            this.onmouseup = null;
            //修复低版本ie bug  
            if (typeof drag.releaseCapture != 'undefined') {
                drag.releaseCapture();
            }
        }
    }
}

效果

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

相关阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    余生动听阅读 10,876评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 4,484评论 1 3
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 129,701评论 2 7

友情链接更多精彩内容