原生js鼠标拖拽效果

常用的鼠标事件有onmousedown(鼠标按下)、onmousemove(鼠标拖动)、onmouseup(鼠标弹起)。
拖拽效果原理很简单,我们在鼠标按下时记录当前的鼠标位置,在鼠标拖动时再记录一下鼠标当前位置,然后根据这两个位置计算偏移量,然后改变div元素的left和top的位置,鼠标弹起后取消拖动。
当然了,待拖动div元素要设置为绝对定位。
代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DRAG</title>
</head>

<body>
    <div id="box" style="position: absolute;background-color:red;width:100px;height:100px;display: inline-block;">

    </div>
</body>

</html>
<script>
    var box = document.getElementById('box');
    var isDrag = false;//是否拖拽
    var diffX, diffY;
    box.onmousedown = function (e) {
        isDrag = true;
        //鼠标当前位置
        var x = e.clientX;
        var y = e.clientY;
        //鼠标相对于div的位置
        console.log(this.offsetLeft);

        diffX = x - this.offsetLeft;
        diffY = y - this.offsetTop;
    }
    box.onmousemove = function (e) {
        if (!isDrag) {//不让拖动
            return;
        }
        //鼠标当前位置
        var x = e.clientX;
        var y = e.clientY;
        box.style.left = x - diffX + 'px';
        box.style.top = y - diffY + 'px';
    }
    box.onmouseup = function () {
        isDrag = false;
    }
</script>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 本文依据半年前本人的分享《浅谈js拖拽》撰写,算是一篇迟到的文章。 基本思路 虽然现在关于拖拽的组件库到处都...
    lanberts阅读 7,229评论 0 0
  • offset家族 offset 自己的目的: js中有一套方便的获取元素尺寸的办法就是offset家族; 1/...
    越IT阅读 13,867评论 1 22
  • 三种定义函数的方式 变量声明提升 在函数体内部,声明变量,会把该声明提升到函数体的最顶端。 只提升变量声明,不赋值...
    J_L_L阅读 2,662评论 0 2
  • 系列文章自定义表单(一)--拖拽(JS版本)自定义表单(二)--拖拽(HTML版本)自定义表单(完)--(html...
    会打代码的扫地王大爷阅读 11,001评论 2 7
  • 先附上一张效果图,里面的图片是我从虽虽酱的微博上扒下来。刚好做九宫格效果图,记录下来也是为了让自己能理解的更深刻,...
    八宝君阅读 5,893评论 1 2