5.JS实现简单拖拽效果

1.拖拽步骤描述:鼠标按下–>鼠标移动—>鼠标抬起(停止移动)

2.实现步骤:监听鼠标在目标元素内的按下事件,按下就设置鼠标移动事 件,开始拖拽,当鼠标抬起时,取消移动事件

3.代码如下:
//用到事件:onmousedown、onmousemove、onmouseup

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JS实现简单拖拽</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        html,body{
            width: 100%;
            height: 100%;
        }
        .mask{
            position: absolute;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.5);
            display: none;
        }

        .btn{
            display: inline-block;
            padding: 20px 20px;
            vertical-align: baseline;
            background-color: #ffccaa;
            color: black;
        }

        .login{
            width: 400px;
            height: 300px;
            background-color: #42b983;
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%,-50%);
            display: none;
            cursor: move;
        }

        .close{
            position: absolute;
            right: 0;
            top: 0;
            background-color: red;
            width: 60px;
            height: 40px;
            text-align: center;
            line-height: 40px;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <!--蒙板-->
    <div class="mask"></div>
    <!--登录按钮-->
    <a href="#" class="btn">登录</a>
    <!--登录框-->
    <div class="login">
      <span class="close">关闭</span>
    </div>
</body>

<script>
    document.addEventListener('DOMContentLoaded',function (){
        let btn=document.querySelector('.btn')
        let mask=document.querySelector('.mask')
        let loginBox=document.querySelector('.login')
        let close=document.querySelector('.close')
        btn.onclick=function (e){
            e=e || window.event
            mask.style.display="block"
            loginBox.style.display="block"
            //阻止默认事件
            e.preventDefault()||(e.returnValue=false)
        }

        close.onclick=function (e){
            e=e || window.event
            mask.style.display="none"
            loginBox.style.display="none"
        }

        //监听登录盒子的鼠标按下事件
        loginBox.onmousedown=function (e){
            e=e || window.event
            //获取鼠标位置和盒子边缘的差值
            let x=e.pageX-loginBox.offsetLeft
            let y=e.pageY-loginBox.offsetTop
            console.log(x,y);

            //监听盒子中鼠标移动事件
            loginBox.onmousemove=function (ev){
                //设置盒子left  top分别为鼠标位置减去边缘位置
                loginBox.style.left=ev.pageX-x+"px"
                loginBox.style.top=ev.pageY-y+"px"
            }

        }

        //鼠标按键抬起事件
        loginBox.onmouseup=function (e){
            e=e||window.event
            loginBox.onmousemove=null
            console.log("okok")
        }


    },false)



</script>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值