JS實(shí)現(xiàn)拖動(dòng)模態(tài)框案例
本文實(shí)例為大家分享了JS實(shí)現(xiàn)拖動(dòng)模態(tài)框的具體代碼,供大家參考,具體內(nèi)容如下
效果圖:
需求分析:
- 點(diǎn)擊登錄后登錄表單和遮罩層顯示,點(diǎn)擊關(guān)閉按鈕隱藏。
- 輸入密碼時(shí)可以明文查看或者隱藏。
- 在表單的頭部按下鼠標(biāo)后可以拖拽表單。
- 鼠標(biāo)彈起拖拽結(jié)束。
話不多說(shuō),我們直接上代碼:
<!DOCTYPE html> <html> ? <head lang="en"> ? ? <meta charset="UTF-8"> ? ? <title></title> ? ? <style> ? ? ? ? .login-header { ? ? ? ? ? ? width: 100%; ? ? ? ? ? ? text-align: center; ? ? ? ? ? ? height: 30px; ? ? ? ? ? ? font-size: 24px; ? ? ? ? ? ? line-height: 30px; ? ? ? ? } ? ? ? ?? ? ? ? ? ul, ? ? ? ? li, ? ? ? ? ol, ? ? ? ? dl, ? ? ? ? dt, ? ? ? ? dd, ? ? ? ? div, ? ? ? ? p, ? ? ? ? span, ? ? ? ? h1, ? ? ? ? h2, ? ? ? ? h3, ? ? ? ? h4, ? ? ? ? h5, ? ? ? ? h6, ? ? ? ? a { ? ? ? ? ? ? padding: 0px; ? ? ? ? ? ? margin: 0px; ? ? ? ? } ? ? ? ?? ? ? ? ? .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; ? ? ? ? } ? ? ? ?? ? ? ? ? .login-bg { ? ? ? ? ? ? display: none; ? ? ? ? ? ? width: 100%; ? ? ? ? ? ? height: 100%; ? ? ? ? ? ? position: fixed; ? ? ? ? ? ? top: 0px; ? ? ? ? ? ? left: 0px; ? ? ? ? ? ? background: rgba(0, 0, 0, .3); ? ? ? ? } ? ? ? ?? ? ? ? ? a { ? ? ? ? ? ? text-decoration: none; ? ? ? ? ? ? color: #000000; ? ? ? ? } ? ? ? ?? ? ? ? ? .login-button a { ? ? ? ? ? ? display: block; ? ? ? ? } ? ? ? ?? ? ? ? ? .login-input input.list-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; ? ? ? ? } ? ? </style> </head> ? <body> ? ? <div class="login-header"><a id="link" href="javascript:;" >點(diǎn)擊,彈出登錄框</a></div> ? ? <div id="login" class="login"> ? ? ? ? <div id="title" class="login-title">登錄會(huì)員 ? ? ? ? ? ? <span><a id="closeBtn" href="javascript:void(0);" class="close-login">關(guān)閉</a></span> ? ? ? ? </div> ? ? ? ? <div class="login-input-content"> ? ? ? ? ? ? <div class="login-input"> ? ? ? ? ? ? ? ? <label>用戶名:</label> ? ? ? ? ? ? ? ? <input type="text" placeholder="請(qǐng)輸入用戶名" name="info[username]" id="username" class="list-input"> ? ? ? ? ? ? </div> ? ? ? ? ? ? <div class="login-input"> ? ? ? ? ? ? ? ? <label>登錄密碼:</label> ? ? ? ? ? ? ? ? <input type="password" placeholder="請(qǐng)輸入登錄密碼" name="info[password]" id="password" class="list-input"> ? ? ? ? ? ? </div> ? ? ? ? </div> ? ? ? ? <div id="loginBtn" class="login-button"><a href="javascript:void(0);" id="login-button-submit">登錄會(huì)員</a></div> ? ? </div> ? ? <!-- 遮蓋層 --> ? ? <div id="bg" class="login-bg"></div> ? ? <script> ? ? ? ? // 1. 獲取元素 ? ? ? ? var login = document.querySelector('.login'); ? ? ? ? var mask = document.querySelector('.login-bg'); ? ? ? ? var link = document.querySelector('#link'); ? ? ? ? var closeBtn = document.querySelector('#closeBtn'); ? ? ? ? var title = document.querySelector('#title'); ? ? ? ? // 2. 點(diǎn)擊彈出層這個(gè)鏈接 link ?讓mask 和login 顯示出來(lái) ? ? ? ? link.addEventListener('click', function() { ? ? ? ? ? ? ? ? mask.style.display = 'block'; ? ? ? ? ? ? ? ? login.style.display = 'block'; ? ? ? ? ? ? }) ? ? ? ? ? ? // 3. 點(diǎn)擊 closeBtn 就隱藏 mask 和 login? ? ? ? ? closeBtn.addEventListener('click', function() { ? ? ? ? ? ? ? ? mask.style.display = 'none'; ? ? ? ? ? ? ? ? login.style.display = 'none'; ? ? ? ? ? ? }) ? ? ? ? ? ? // 4. 開(kāi)始拖拽 ? ? ? ? ? ? // (1) 當(dāng)我們鼠標(biāo)按下, 就獲得鼠標(biāo)在盒子內(nèi)的坐標(biāo) ? ? ? ? title.addEventListener('mousedown', function(e) { ? ? ? ? ? ? var x = e.pageX - login.offsetLeft; ? ? ? ? ? ? var y = e.pageY - login.offsetTop; ? ? ? ? ? ? // (2) 鼠標(biāo)移動(dòng)的時(shí)候,把鼠標(biāo)在頁(yè)面中的坐標(biāo),減去 鼠標(biāo)在盒子內(nèi)的坐標(biāo)就是模態(tài)框的left和top值 ? ? ? ? ? ? document.addEventListener('mousemove', move) ? ? ? ? ? ? ? function move(e) { ? ? ? ? ? ? ? ? login.style.left = e.pageX - x + 'px'; ? ? ? ? ? ? ? ? login.style.top = e.pageY - y + 'px'; ? ? ? ? ? ? } ? ? ? ? ? ? // (3) 鼠標(biāo)彈起,就讓鼠標(biāo)移動(dòng)事件移除 ? ? ? ? ? ? document.addEventListener('mouseup', function() { ? ? ? ? ? ? ? ? document.removeEventListener('mousemove', move); ? ? ? ? ? ? }) ? ? ? ? }) ? ? </script> </body> ? </html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JS截取字符串 subStr()、substring()、slice() 方法示例詳解
這篇文章主要介紹了JS截取字符串 subStr()、substring()、slice() 方法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01javascript中活靈活現(xiàn)的Array對(duì)象詳解
本文的內(nèi)容就如同標(biāo)題一樣,這篇文章將會(huì)靈活的運(yùn)行Array對(duì)象的一些方法來(lái)實(shí)現(xiàn)看上去較復(fù)雜的應(yīng)用。相信對(duì)大家學(xué)習(xí)或者理解javascript中的Array對(duì)象能具有一定的參考借鑒價(jià)值,有需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2016-11-11Bootstrap進(jìn)度條實(shí)現(xiàn)代碼解析
這篇文章主要為大家詳細(xì)介紹了Bootstrap進(jìn)度條的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03詳解javascript立即執(zhí)行函數(shù)表達(dá)式IIFE
本文主要介紹了javascript立即執(zhí)行函數(shù)表達(dá)式IIFE的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02javascript 無(wú)提示關(guān)閉窗口腳本
在IE7、IE8中,使用JavaScript提供的close()方法都可以關(guān)閉當(dāng)前窗口或標(biāo)簽,但都提示討厭的對(duì)話框,找了下代碼,終于可以無(wú)提示直接關(guān)閉了。2009-08-08Javascript實(shí)現(xiàn)商品秒殺倒計(jì)時(shí)(時(shí)間與服務(wù)器時(shí)間同步)
在一些購(gòu)物商城經(jīng)??吹接泻芏嗌唐纷雒霘⒒顒?dòng),也就是倒計(jì)時(shí),本篇文章給大家介紹Javascript實(shí)現(xiàn)商品秒殺倒計(jì)時(shí)(時(shí)間與服務(wù)器時(shí)間同步),需要的朋友可以了解下2015-09-09微信小程序當(dāng)前時(shí)間時(shí)段選擇器插件使用方法詳解
這篇文章主要為大家詳細(xì)介紹了微信小程序當(dāng)前時(shí)間時(shí)段選擇器插件使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12基于JS實(shí)現(xiàn)將JSON數(shù)據(jù)轉(zhuǎn)換為TypeScript類型聲明的工具
在TypeScript?項(xiàng)目中,我們經(jīng)常需要使用聲明一系列的ts類型。然而,手動(dòng)寫的效率實(shí)在太低,本文就實(shí)現(xiàn)一個(gè)工具將?JSON?數(shù)據(jù)轉(zhuǎn)換為?TypeScript?類型定義,需要的可以參考一下2023-04-04JS實(shí)現(xiàn)數(shù)組/對(duì)象數(shù)組刪除其中某一項(xiàng)
這篇文章主要介紹了JS實(shí)現(xiàn)數(shù)組/對(duì)象數(shù)組刪除其中某一項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09