<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了js實現模態框拖拽效果的具體程式碼,供大家參考,具體內容如下
之前學習js遇到了這樣的需求:
滑鼠按下後,移動滑鼠,模態框隨滑鼠移動,滑鼠鬆開,模態框也不會隨滑鼠移動。<完整的程式碼在最後哦>
分析思路:
1.點選彈出層,模態框和遮擋層就會顯示出來。display:block
2.點選關閉按鈕,模態框和遮擋層就會隱藏。display:none
3.在頁面中拖拽的步驟:滑鼠按下並移動,之後鬆開滑鼠
4.觸發事件是滑鼠按下mousedown,滑鼠移動是mousemove,滑鼠鬆開:mouseup
5.拖拽過程:滑鼠移動過程中,獲得最新的值賦值給模態框的left和top值,這樣模態框就可以跟著滑鼠走了
6.滑鼠按下觸發的時間源是最上面一行,也就是說,滑鼠只有放在最上面一行,才能觸發該事件。放在其他區域不會觸發該事件。
7.滑鼠的座標減去滑鼠在盒子內的座標,才是模態框真正的位置。(因為模態框是可移動的,只有第一次才能拿到模態框的left和top,其他時候並不能直接拿到。所以採用‘滑鼠的座標 - 滑鼠在模態框內的座標’來計算模態框的位置)
8.滑鼠按下,我們要得到滑鼠在盒子內的座標
9.滑鼠移動,就讓模態框的座標設定為:滑鼠座標 - 盒子座標即可。注意移送事件要寫到按下事件裡面
10.滑鼠鬆開,就停止拖拽,可以讓滑鼠移動事件解除
程式碼實現:
<!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; } #link { color: #000; text-decoration: none; border: 1px solid #000; } .login { width: 300px; height: 200px; background-color: antiquewhite; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 2; display: none; } .login-title { text-align: center; width: 100%; height: 40px; line-height: 40px; background-color: aqua; cursor: move; } .login-title span { display: block; height: 30px; width: 30px; background-color: antiquewhite; line-height: 30px; border-radius: 50%; position: absolute; top: -10px; right: -10px; font-size: 12px; } .login-title span a { text-decoration: none; color: #000; } .login-input-content { margin: 15px 20px 0; line-height: 30px; } .login-button { width: 200px; height: 20px; margin: 10px auto; border: 1px solid rgb(77, 73, 73); text-align: center; } .login-button a { text-decoration: none; color: #000; font-size: 14px; } #bg { display: none; background-color: #000; width: 100%; height: 100%; opacity: 0.3; z-index: -1; position: absolute; top: 0; left: 0; } </style> </head> <body> <div class="login-header"><a href="javascript:;" id="link">點選,彈出登入框</a></div> <div class="login" id="login"> <div class="login-title">登入會員 <span><a id="colseBth" href="javascript:void(0);" class="close-login">關閉</a></span> </div> <div class="login-input-content"> <div class="login-input"> <label for="">用 戶 名:</label> <input type="text" placeholder="請輸入使用者名稱" name="info[sername]" id="username" class="username"> </div> <div class="login-inpit"> <label for="">登入密碼:</label> <input type="password" placeholder="請輸入登入密碼" name="info[password]" id="password"> </div> </div> <div class="login-button" id="loginBtn"><a href="javascript:void(0);" id="login-button-submit">會員登入</a></div> </div> <!-- 遮罩層 --> <div class="login-bg" id="bg"></div> </body> <script> // 1.點選,彈出模態框和遮罩層 // 3.點選關閉模態框和遮罩層自動隱藏 // 4.頁面拖拽原理:滑鼠按下且移動,之後鬆開滑鼠 // 5.拖拽過程:滑鼠移動的時候獲得新的值賦值給模態框的left和top值。 //1.獲取DOM元素 var oLink = document.querySelector('#link'); var oLogin = document.querySelector('.login'); var oBg = document.querySelector('#bg'); var oClose = oLogin.querySelector('#colseBth'); var title = oLogin.querySelector('.login-title'); //2.點選彈出層這個連結link,讓mask和login顯示出來 oLink.addEventListener('click', function () { oLogin.style.display = 'block'; oBg.style.display = 'block'; }) //3.點選closeBtn就隱藏mask和login oClose.addEventListener('click', function () { oLogin.style.display = 'none'; oBg.style.display = 'none'; }) //4.開始拖拽 //(1)當我們滑鼠按下,就獲得滑鼠在盒子內的座標 title.addEventListener('mousedown', function (e) { var x = e.pageX - oLogin.offsetLeft; var y = e.pageY - oLogin.offsetTop; console.log(x, y) //(2)滑鼠移動的時候,把滑鼠在頁面中的座標 減去 滑鼠在盒子內的座標就是模態框的left和top值 document.addEventListener('mousemove', move) function move(e) { oLogin.style.left = e.pageX - x + 'px'; oLogin.style.top = e.pageY - y + 'px'; } //(3)滑鼠彈起,就讓滑鼠移動事件移除 document.addEventListener('mouseup', function () { document.removeEventListener('mousemove', move); }) }) </script> </html>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45