天天看點

JavaScript 拖拽的模态框JavaScript 拖拽的模态框

JavaScript 拖拽的模态框

【案例分析】

  1. 點選彈出層,會彈出模态框,并且顯示遮擋層
  2. 點選關閉按鈕,可以關閉模态框,并且同時關閉遮擋層
  3. 滑鼠放到模态框在上面一行,可以按住滑鼠拖拽模态框在頁面中移動
  4. 滑鼠放松,可以停止拖動模态框

頁面拖拽的事件是:滑鼠按下mousedown,滑鼠移動mousemove,滑鼠松開mouseup

拖拽過程:滑鼠移動過程中,滑鼠獲得最新的left、right值并指派給模态框

實作元素居中效果

left: 50%;
top: 50%;
transform: translate(-50%,-50%);
           

以下為全部代碼:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>模态框</title>
        <style type="text/css">
            .login-header {
                width: 200px;
                height: 200px;
                margin: 0px auto;
            }
            #link{
                text-decoration: none;
                color: black;
                font-size: 50px;
            }
            .loging-box {
                background-color: #DCD7D7;
                width: 500px;
                height: 200px;
                margin: 10px auto;
                position: fixed;
                left: 50%;
                top: 50%;
                transform: translate(-50%,-50%);
                padding: 8px;
                border-radius: 5%;
                display: none;
            }
            p {
                font-size: 20px;
            }
            #title {
                float: left;
            }
            #close {
                float: right;
            }
            #close a{
                text-decoration: none;
                color: black;
            }
            .header {
                height: 20px;
                cursor: pointer;
            }
            #input-box {
                margin-top: 47px;
                margin-left: 107px;
            }
            .login-input{
                margin-bottom: 10px;
                font-size: 20px;
            }
            .login-input input {
                width: 180px;
                height: 25px;
            }
            .loging-box button{
                width: 150px;
                height: 30px;
                display: block;
                margin: 20px auto;
            }
        </style>
    </head>
    <body>
        <div class="login-header"> <a id="link" href="javascript:;">點選登入</a> </div>
        <!-- 登入頁面框 -->
        <div class="loging-box">
            <p id="title">使用者登入界面</p>  <p id="close"><a href="javascript:;">關閉</a></p>
            <div class="header"></div>
            <div id="input-box">
                <div class="login-input">
                    <label>使用者名:</label>
                    <input type="text" placeholder="請輸入使用者名">
                </div>

                <div class="login-input">
                    <label>密 &nbsp&nbsp 碼: </label>
                    <input type="password" placeholder="請輸入密碼">	
                </div>
            </div>
            <button>登入</button>
        </div>

        <script type="text/javascript">
            var link = document.querySelector('#link');
            var logingBox = document.querySelector('.loging-box');
            var close = document.querySelector('#close');
            // 彈出登入界面
            link.addEventListener('click', function(){
                logingBox.style.display = 'block';
                link.style.display = 'none';
                document.body.style.backgroundColor = '#9C9C9C';
            })
            // 關閉登陸界面的效果
            close.addEventListener('click', function(){
                logingBox.style.display = 'none';
                link.style.display = 'block';
                document.body.style.backgroundColor = '#FFFFFF';
            })

            // 拖拽效果,隻在.header下拖動才有效
            // 1.滑鼠按下
            var header = document.querySelector('.header');
            header.addEventListener('mousedown',function(e){
                // 得到滑鼠在登入框中的坐标
                var x = e.pageX - logingBox.offsetLeft;
                var y = e.pageY - logingBox.offsetTop;
                function move (e) {
                    // 登入框的坐标是按照框的左上角決定的,是以要減去框内坐标
                    logingBox.style.left = e.pageX - x + 'px';
                    logingBox.style.top = e.pageY - y + 'px';

                }
                // 2.實作滑鼠拖動效果
                document.addEventListener('mousemove', move);
                // 3.當滑鼠放開後,清除事件
                document.addEventListener('mouseup', function(){
                    document.removeEventListener('mousemove', move);
                })

            })
        </script>
    </body>
</html>
           

繼續閱讀