天天看點

拖動的模态框

案例分析:

1,點選彈出層,會彈出模态框,并且顯示灰色半透明的遮擋層。

2,點選關閉按鈕,可以關閉模态框,并且同時關閉灰色半透明遮擋層。

3,滑鼠放到模态框最上面一行,可以按住滑鼠拖拽模态框在頁面中移動。mousedown  mousemove

4,滑鼠松開,可以停止模态框移動  mouseup

5,  拖拽過程,滑鼠移動過程中,獲得最新的值賦給模态框的left 和 top 值,這樣模态框就可以跟着滑鼠走了。

6,滑鼠按下觸發的事件源是最上面一行,就是  id 為 title

7,  滑鼠的坐标減去 滑鼠在盒子内的坐标,才是模态框真正的位置

8,滑鼠按下,要得到滑鼠在盒子的坐标

      滑鼠移動,就讓模态框的坐标設定為 : 滑鼠坐标減去滑鼠在盒子内的坐标即可,注意移動事件寫                         到按下事件的裡面

      滑鼠松開:就停止拖拽,就是可以讓滑鼠移動事件解除

完整代碼

拖動的模态框
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .login-header {
            width: 100%;
            text-align: center;
            height: 30px;
            font-size: 24px;
            line-height: 30px;
        }

        .login {
            display: none;
            width: 512px;
            height: 280px;
            position: fixed;
            border: #ebebeb solid 1px;
            left: 50%;
            top: 50%;
            background: #ffffff;
            box-shadow: 0px 0px 20px #ddd;
            z-index: 9999;
            transform: translate(-50%, -50%);
        }

        .login-title {
            width: 100%;
            margin: 10px 0px 0px 0px;
            text-align: center;
            line-height: 40px;
            height: 40px;
            font-size: 18px;
            position: relative;
            cursor: move;
        }

        .login-input-content {
            margin-top: 20px;
        }

        .login-button {
            width: 50%;
            margin: 30px auto 0px auto;
            line-height: 40px;
            font-size: 14px;
            border: #ebebeb 1px solid;
            text-align: center;
        }

        a {
            text-decoration: none;
            color: #000000;
        }

        .login-button a {
            display: block;
        }

        .login-input input{
            float: left;
            line-height: 35px;
            height: 35px;
            width: 350px;
            border: #ebebeb 1px solid;
            text-indent: 5px;
        }

        .login-input {
            overflow: hidden;
            margin: 0px 0px 20px 0px;
        }

        .login-input label {
            float: left;
            width: 90px;
            padding-right: 10px;
            text-align: right;
            line-height: 35px;
            height: 35px;
            font-size: 14px;
        }

        .login-title span {
            position: absolute;
            font-size: 12px;
            right: -20px;
            top: -30px;
            background: #ffffff;
            border: #ebebeb solid 1px;
            width: 40px;
            height: 40px;
            border-radius: 20px;
        }
        .login-bg {
            display: none;
            width: 100%;
            height: 100%;
            position: fixed;
            top: 0px;
            left: 0px;
            background: rgba(0, 0, 0, .3);
        }
    </style>
</head>
<body>
<div class="login-header"><a href="javascript:;" id="link">點選,彈出登陸框</a></div>

<div  class="login">
    <div class="login-title">登陸會員
         <span><a href="javascript:;" id="closeBtn">關閉</a></span>
    </div>

    <div class="login-input-content">
        <div class="login-input">
            <label for="">使用者名</label>
            <input type="text" placeholder="請輸入使用者名" name="info[username]" id="username">
        </div>
        <div class="login-input">
            <label for="">登陸密碼</label>
            <input type="text" placeholder="請輸入登陸密碼" name="info[password]" id="password">
        </div>
    </div>

    <div class="login-button"><a href="javascript:;" id="login-submit">登陸會員</a></div>
</div>
    <div class="login-bg"></div>   <!--遮蓋層-->
</body>
</html>
<script>
    var link=document.querySelector("#link");
    var closeBtn=document.querySelector("#closeBtn");
    var login=document.querySelector(".login");
    var login_bg=document.querySelector(".login-bg");

    //1,實作模态框和 遮擋層的顯示與隐藏
    link.addEventListener("click",function(){
        login.style.display="block";
        login_bg.style.display="block";
    })
    closeBtn.addEventListener("click",function () {
        login.style.display="none";
        login_bg.style.display="none";
    })

    //2,開始拖拽
    var login_title=document.querySelector(".login-title");
    login_title.addEventListener("mousedown",function (e) {  //滑鼠按下的時候,得到滑鼠在盒子裡面的坐标
        var x=e.pageX-login.offsetLeft;
        var y=e.pageY-login.offsetTop;
        document.addEventListener("mousemove",move);  //滑鼠移動的時候,得到模态框的坐标
        function move(e){
            login.style.left=e.pageX-x +"px";
            login.style.top=e.pageY-y + "px";
        }
        document.addEventListener("mouseup",function(){  //滑鼠彈起的時候,解除滑鼠移動事件
            document.removeEventListener("mousemove",move);
        })
    })
</script>      
拖動的模态框

關鍵代碼:

  滑鼠按下--滑鼠移動--滑鼠彈起

login_title.addEventListener("mousedown", function(e) {
    var x=e.pageX-login.offsetLeft;
    var y=e.pageY-login.offsetTop;

    document.addEventListener("mousemove" , move);
    function move(e){
       login.style.left=e.pageX -x +"px";
       login.style.top=e.pageY -y +"px";
    }
 })

document.addEventListener("mouseup",function(){
  document.removeEventListener("mousemove",move);
})