javascript實現移動的模態框效果
本文實例為大傢分享瞭javascript實現移動的模態框效果的具體代碼,供大傢參考,具體內容如下
頁面效果:
點擊鏈接後,彈出登錄模態框,點擊關閉鏈接可以關閉模態框,鼠標在模態框標題區域按下後可以拖拽模態框,松開鼠標後,模態框停止移動
實現思路:
1、html、css搭建好頁面,設置好模態框內容和樣式後,將模態框隱藏:display: none;如果點擊彈出模態框後,頁面背景色發生改變,可以添加一個遮罩層,將遮罩層也先隱藏
2、給點擊後彈出模態框的元素添加點擊事件- – -onclick
事件處理程序中設置- – -模態框 和 遮罩層 顯示- – -eg:
login.style.display = ‘block'; loginBg.style.display = ‘block';
3、給關閉模態框元素添加點擊事件- – -onclick
事件處理程序中設置- – -模態框 和 遮罩層 隱藏- – -eg:
login.style.display = ‘none'; loginBg.style.display = ‘none';
4、給模態框標題部分添加鼠標按下事件- – -mousedown
獲取鼠標在模態框中的位置,
5、鼠標按下事件中再添加鼠標移動事件- – -mousemove
document.addEventListener(‘mousemove', move);
獲取鼠標在頁面中的位置,
鼠標的位置值 – 鼠標在模態框中的位置值 = 模態框在頁面中的位置值
將計算得出的位置值賦值給模態框的top、left,就可以達到拖拽鼠標的效果,跟隨鼠標移動
6、當鼠標松開後,模態框要停止移動。鼠標按下事件中再添加鼠標松開事件- – -mouseup
鼠標松開事件處理程序:頁面移除鼠標移動事件- – -document.removeEventListener(‘mousemove’, move);
註意:要添加移除事件,所以給鼠標移動函數單獨拿出來,寫一個函數名,添加和移除事件時引用函數名就可以瞭
代碼示例:
<!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>拖動的模態框</title> <style> * { margin: 0; padding: 0; } a { text-decoration: none; color: #000; } .login-header { margin: 100px auto; height: 30px; line-height: 30px; font-size: 24px; text-align: center; } .login { display: none; width: 515px; height: 282px; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); border: 1px solid #ebebeb; background-color: #fff; box-shadow: 0px 0px 20px #ddd; text-align: center; z-index: 99999; } .login-title { position: relative; height: 50px; line-height: 50px; font-size: 18px; cursor: move; } .close { position: absolute; top: 0; right: 0; transform: translate(50%, -50%); width: 36px; height: 36px; line-height: 36px; font-size: 12px; border-radius: 18px; border: 1px solid #ddd; color: #666; background-color: #fff; } .login-input-content { margin: 10px 0; } .login-input label { display: inline-block; width: 80px; text-align: right; } .login-input input { width: 300px; height: 40px; margin: 10px 0; padding-left: 10px; border: 1px solid #ddd; outline-color: royalblue; } .loginBtn a { display: block; width: 180px; height: 35px; line-height: 35px; margin: 10px auto; border: 1px solid #ddd; } .login-bg { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, .3); } </style> </head> <body> <div class="login-header"><a id="link" href="javascript:;" >點擊,彈出登錄框</a></div> <div class="login"> <div class="login-title"> 登錄會員 <span><a class="close" href="javascript:void(0);" >關閉</a></span> </div> <div class="login-input-content"> <div class="login-input"> <label for="username">用戶名:</label> <input type="text" name="info[username]" id="username" placeholder="請輸入用戶名"><br> </div> <div class="login-input"> <label for="password">登錄密碼:</label> <input type="password" name="info[password]" id="password" placeholder="請輸入登錄密碼"><br> </div> </div> <div type="submit" value="登錄會員" class="loginBtn"><a href="javascript:void(0);" >登錄會員</a></div> </div> <!-- 遮蓋層 --> <div class="login-bg"></div> <script> var link = document.querySelector('#link'); var login = document.querySelector('.login'); var loginBg = document.querySelector('.login-bg'); var close = document.querySelector('.close'); var loginTitle = document.querySelector('.login-title'); link.addEventListener('click', function() { login.style.display = 'block'; loginBg.style.display = 'block'; }) close.addEventListener('click', function() { login.style.display = 'none'; loginBg.style.display = 'none'; }) loginTitle.addEventListener('mousedown', function(e) { // 計算出鼠標按下時,鼠標在模態框中的位置 var x = e.pageX - login.offsetLeft; var y = e.pageY - login.offsetTop; // 給移動的模態框賦值位置 function move(e) { login.style.left = e.pageX - x + 'px'; login.style.top = e.pageY - y + 'px'; } // 添加鼠標事件,按下鼠標時模態框跟著鼠標移動 document.addEventListener('mousemove', move); // 鼠標松開時,模態框停止移動 document.addEventListener('mouseup', function() { document.removeEventListener('mousemove', move); }) }) </script> </body> </html>
頁面效果:
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。