拖拽div控件实战


思路

1、鼠标点击,获取位置 2、鼠标拖动事件,更新位置 3、鼠标松开事件,更新位置

提示:以下是本篇文章正文内容,下面案例可供参考

二、示意图

元素的位移

1.代码示例

代码如下(示例):

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    * {
        margin: 0;
        padding: 0;
    }

    #div1 {
        width: 120px;
        height: 120px;
        background: orange;
        position: absolute;

    }
</style>

<body>
    <div id="div1"></div>
</body>

<script>

    var div1 = document.getElementById('div1');

    // 初始化
    var x; //元素初始位置
    var y;
    var xx;  // 鼠标初始位置
    var yy;
    var mx;  //鼠标现在位置
    var my;
    div1.onmousedown = function (event) {
        var event = event || window.event;
        // 获取元素对象初始的位置
        x = this.offsetLeft;
        y = this.offsetTop;
        // 获取鼠标的初始位置
        xx = event.clientX;
        yy = event.clientY;

        var dx = xx - x;
        var dy = yy - y;
        // 鼠标移动
        document.onmousemove = function (event) {

            // 获取鼠标的位置
            mx = event.clientX;
            my = event.clientY;
            // 鼠标的前后两次的移动位移差
            _x = mx - dx;
            _y = my - dx;

            // 不让div出去
            // 上面和左面
            if (_x <= 0) {
                _x = 0
            }
            if (_y <= 0) {
                _y = 0;
            }
            // 左面 和 右面
                 // 获取元素的信息
            var div1_size = div1.getBoundingClientRect();
            var div1_width = div1_size.width;
            var div1_height = div1_size.height;
                // 获取文档页面大小
            var doc_cli_width = document.documentElement.clientWidth;
            var doc_cli_height = document.documentElement.clientHeight;
                 // 差
            var cha_width = doc_cli_width - div1_width;
            var cha_height = doc_cli_height - div1_height;
                 // 获取元素的left top
            if (_x >= cha_width) {
                _x = cha_width
            }
            if (_y >= cha_height) {
                _y = cha_height
            }
            // 设置div的位置
            // 只有div1.style.top可以设置
            div1.style.top = _y + 'px';
            div1.style.left = _x + 'px';
        }

        // 鼠标抬起来
        div1.onmouseup = function (event) {
            document.onmousemove = null;
            // 获取鼠标的位置
            mx = event.clientX;
            my = event.clientY;
            // 鼠标的前后两次的移动位移差
            _x = mx - dx;
            _y = my - dy;

            // 设置div的位置
            // 只有div1.style.top可以设置
            div1.style.top = _y + 'px';
            div1.style.left = _x + 'px';

        }
    }


</script>

</html>

总结

1、元素的: style.left = clientX2 - clientX1 + offsetleft
2、document.documentElement.clientWidth || document.body.clientWidth 获取文档可视区域的宽度
3、var vv = div1.getBoundingClientRect() 获取元素的信息
vv.width // vv.height
4、拖动事件:

document,onmousemove = function(  //代码	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值