js拖拽

方式一:drag、drop

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    div{
        width: 200px;
        height: 80px;
        border: 1px solid #ccc;
    }
</style>
<body>
    <span id="span" draggable="true" ondragstart="drag(event)">拽我啊</span>
    <div class="div1" ondragover="dragover()" ondrop="drop(event)"></div>
    <div class="div2" ondragover="dragover()" ondrop="drop(event)"></div>
</body>
<script>
    //实现拖拽
    function drag(event){
        event.dataTransfer.setData("span",event.target.id)
       
    }
    function dragover(){
        event.preventDefault()
    }
    function drop(event){
        event.preventDefault()
        var data = event.dataTransfer.getData("span")
        event.target.appendChild(document.getElementById(data))
    }
</script>
</html>

 

 

方式二:mousedownmousemovemouseup

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <style type="text/css">
        body{
            margin: 0;
            padding: 0;
        }
        .d1,.d2{
            width:100px;
            height: 100px;
            top: 10px;
            left: 10px;
            background-color: deepskyblue;
            position: absolute;
        }
        .d2{
            top: 10px;
            left: 150px;
            background-color: aquamarine;
        }
    </style>
    <body>
        <div class="d1"></div>
        <div class="d2"></div>
    </body>
</html>
<script type="text/javascript">
    let d1 = document.querySelector(".d1");
    let d2 = document.querySelector(".d2");
    
    
    class Dra{
        constructor(ele) {
            this.ele = ele
        }
        downFn(){
            this.ele.onmousedown = e=>{
                let x,y
                let ev = e || window.event;
                console.log(ev.clientX,ev.clientY)
                x = ev.clientX - this.ele.offsetLeft;
                y = ev.clientY - this.ele.offsetTop;
                this.moveFn(x,y)
            }
        }
        moveFn(x,y){
            this.ele.onmousemove = e=>{
                let ev = e || window.event
                let xx = e.clientX
                let yy = e.clientY
                this.setStyle(xx-x,yy-y)
                this.upFn()
            }
        }
        setStyle(x,y){
            this.ele.style.left = x+"px"
            this.ele.style.top = y+"px"
        }
        upFn(){
            this.ele.onmouseup= () =>{
                this.ele.onmousemove = ""
            }
        }
    }
    
    let dra = new Dra(d1)
    dra.downFn()
    let dra2 = new Dra(d2)
    dra2.downFn()
    
    class Limit extends Dra{
        constructor(ele) {
            super(ele)
        }
        setStyle(x,y){
            x = x<0?0:x
            y = y<0?0:y
            super.setStyle(x,y)
        }
    }
    
    let limit = new Limit(d2)
    limit.downFn()</script>