首页 > Web开发 > 详细

【js】js实现拖拽功能

时间:2020-03-10 15:57:34      阅读:56      评论:0      收藏:0      [点我收藏+]
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>test</title>
    <style>
        html,
        body {
            margin: 0px;
            padding: 0px;
            width: 100%;
            height: 100%;
        }

        div {
            position: absolute;
        }

        .red {
            top: 0px;
            left: 0px;
            width: 100px;
            height: 100px;
            background: red;
        }

        .green {
            top: 500px;
            left: 100px;
            width: 80px;
            height: 100px;
            background: green;
        }

        .blue {
            top: 200px;
            left: 160px;
            width: 180px;
            height: 150px;
            background: blue;
        }
    </style>
</head>

<body>
    <div class="red">red</div>
    <div class="green">green</div>
    <div class="blue">blue</div>
    <script>
        var div = document.getElementsByTagName(div);
        // PC端实现
        document.addEventListener(mousedown, function (e) {
            console.log(pc端);
            let target = e.target;
            if (target.tagName == DIV) {
                let distanceX = e.clientX - target.offsetLeft;
                let distanceY = e.clientY - target.offsetTop;
                function mousemove(e) {
                    let x = e.clientX - distanceX,
                        y = e.clientY - distanceY,
                        window_width = document.documentElement.clientWidth - target.offsetWidth,
                        window_height = document.documentElement.clientHeight - target.offsetHeight;

                    x = x < 0 ? 0 : x; // 当元素到窗口最左边
                    x = x > window_width ? window_width : x; // 当元素到窗口最右边
                    y = y < 0 ? 0 : y; // 当元素到窗口最上边
                    y = y > window_height ? window_height : y; // 当元素到窗口最下边

                    target.style.top = y + px;
                    target.style.left = x + px;
                }
                document.addEventListener(mousemove, mousemove, false);
                function mouseup(e) {
                    document.removeEventListener(mousemove, mousemove, false);
                    document.removeEventListener(mouseup, mouseup, false);
                }
                document.addEventListener(mouseup, mouseup, false)
            }
        }, false)

        // 移动端实现
        document.addEventListener(touchstart, function (e) {
            console.log(移动端);
            let target = e.target;
            if (target.tagName == DIV) {
                let distanceX = e.touches[0].clientX - target.offsetLeft;
                let distanceY = e.touches[0].clientY - target.offsetTop;
                function touchmove(e) {
                    let x = e.touches[0].clientX - distanceX,
                        y = e.touches[0].clientY - distanceY,
                        window_width = document.documentElement.clientWidth - target.offsetWidth,
                        window_height = document.documentElement.clientHeight - target.offsetHeight;

                    x = x < 0 ? 0 : x; // 当元素到窗口最左边
                    x = x > window_width ? window_width : x; // 当元素到窗口最右边
                    y = y < 0 ? 0 : y; // 当元素到窗口最上边
                    y = y > window_height ? window_height : y; // 当元素到窗口最下边

                    target.style.top = y + px;
                    target.style.left = x + px;
                }
                document.addEventListener(touchmove, touchmove, false);
                function touchend(e) {
                    document.removeEventListener(touchmove, touchmove, false);
                    document.removeEventListener(touchend, touchend, false);
                }
                document.addEventListener(touchend, touchend, false);
            }
        })
    </script>
</body>

</html>

注意:移动端和PC端事件触发稍有不同。

 

【参考文章】

js拖拽效果

【js】js实现拖拽功能

原文:https://www.cnblogs.com/wannananana/p/12455686.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!