js實(shí)現(xiàn)登錄框鼠標(biāo)拖拽效果
更新時(shí)間:2017年03月09日 10:23:58 作者:lqm123
本文主要介紹了js實(shí)現(xiàn)登錄框鼠標(biāo)拖拽效果的實(shí)例,具有很好的參考價(jià)值。下面跟著小編一起來看下吧
效果圖:

代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登錄框鼠標(biāo)拖拽效果</title>
<style type="text/css">
body {
background: url("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1488778794834&di=e97c96dfe7860297d1968c30adc862a2&imgtype=0&src=http%3A%2F%2Fpic1.5442.com%3A82%2F2015%2F0409%2F01%2F15.jpg%2521960.jpg") no-repeat top center #ffffff;
background-size: 100%;
padding: 0;
margin: 0;
font-size: 12px;
font-family: "微軟雅黑", sans-serif;
}
.ui-dialog {
width: 380px;
position: absolute;
z-index: 9000;
top: 100px;
left: 100px;
border: 1px solid #d5d5d5;
background-color: #ffffff;
/*display: none;*/
}
.ui-dialog-title {
height: 48px;
line-height: 48px;
padding-left: 20px;
color: #535353;
font-size: 16px;
background-color: #f5f5f5;
border-bottom: 1px solid #efefef;
cursor: move;
}
.ui-dialog-title-closebutton {
width: 16px;
height: 16px;
display: inline-block;
position: absolute;
right: 20px;
color: #000;
text-decoration: unset;
}
.ui-dialog-title-closebutton:hover {
color: #4ca8ff;
}
.ui-dialog-content {
padding: 15px 20px;
}
.ui-dialog-pt15 {
padding-top: 15px;
}
.ui-dialog-l40 {
height: 40px;
line-height: 40px;
text-align: right;
}
.ui-dialog-input {
width: 100%;
height: 40px;
margin: 0;
padding: 0;
border:1px solid #d5d5d5;
font-size: 16px;
color: #c1c1c1;
text-indent: 25px;
outline: none;
}
.ui-dialog-input-username {
background: url("images/input_username.png") no-repeat 2px;
}
.ui-dialog-input-password {
background: url("images/input_password.png") no-repeat 2px;
}
.ui-dialog-submit {
width: 100%;
height: 50px;
background: #3b7ae3;
border: none;
font-size: 16px;
color: #ffffff;
outline: none;
text-decoration: none;
display: block;
text-align: center;
line-height: 50px;
}
.ui-dialog-submit:hover {
background: #3f81b0;
}
.ui-mask {
width: 100%;
height: 100%;
background: #000;
opacity: 0.4;
position: absolute;
top: 0;
left: 0;
z-index: 8000;
display: none;
}
.link {
text-align: right;
line-height: 20px;
padding-right: 40px;
}
</style>
</head>
<body>
<div class="ui-dialog" id="dialog">
<div class="ui-dialog-title" id="dialogTitle">
登錄
<!-- 右上角的關(guān)閉按鈕 -->
<a href="javascript:hideDialog();" rel="external nofollow" class="ui-dialog-title-closebutton">X</a>
</div>
<div class="ui-dialog-content">
<div class="ui-dialog-l40 ui-dialog-pt15">
<input class="ui-dialog-input ui-dialog-input-username" type="input" placeholder="手機(jī)/郵箱/用戶名" />
</div>
<div class="ui-dialog-l40 ui-dialog-pt15">
<input class="ui-dialog-input ui-dialog-input-password" type="input" placeholder="密碼" />
</div>
<div class="ui-dialog-l40">
<a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >忘記密碼</a>
</div>
<div>
<a class="ui-dialog-submit" href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >登錄</a>
</div>
<div class="ui-dialog-l40">
<a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >立即注冊</a>
</div>
</div>
</div>
<div class="ui-mask" id="mask"></div>
<div class="link">
<a href="javascript:showDialog();" rel="external nofollow" style=" text-decoration: unset;color: #4ca8ff">登錄</a>
</div>
<script type="text/javascript">
// 獲取元素對象
function g(id) {
return document.getElementById(id);
}
// 自動(dòng)居中函數(shù) -- 登錄浮層
// el {Element}
function autoCenter(el) {
// 獲得可視區(qū)域的寬和高
var bodyW = document.documentElement.clientWidth;
var bodyH = document.documentElement.clientHeight;
// 獲得元素 el 的寬和高
var elW = el.offsetWidth;
var elH = el.offsetHeight;
// 設(shè)置元素的 style 樣式
el.style.left = (bodyW - elW) / 2 + 'px';
el.style.top = (bodyH - elH) / 2 + 'px';
}
// 擴(kuò)展元素到整個(gè)可視區(qū)域 -- 遮罩層
// el {Element}
function fillToBody(el) {
// 將元素的寬和高設(shè)置的和可視區(qū)域一樣
el.style.width = document.documentElement.clientWidth + 'px';
el.style.height = document.documentElement.clientHeight + 'px';
}
// 定義全局變量
var mouseOffsetX = 0;
var mouseOffsetY = 0;
var isDragging = false;
// 鼠標(biāo)事件1 -- 在標(biāo)題欄上按下
// 計(jì)算鼠標(biāo)相對拖拽元素的的左上角的坐標(biāo), 并且標(biāo)記元素為可拖動(dòng)
g('dialogTitle').addEventListener('mousedown', function(e) {
var e = e || window.event;
// 用鼠標(biāo)按下時(shí)的坐標(biāo)減去 dialog 的左上角坐標(biāo)
mouseOffsetX = e.pageX - g('dialog').offsetLeft;
mouseOffsetY = e.pageY - g('dialog').offsetTop;
isDragging = true;
});
// 鼠標(biāo)事件2 -- 鼠標(biāo)移動(dòng)
document.onmousemove = function(e) {
var e = e || window.event;
// 鼠標(biāo)當(dāng)前位置
var mouseX = e.pageX;
var mouseY = e.pageY;
// 鼠標(biāo)從單擊時(shí)至當(dāng)前時(shí)刻移動(dòng)的距離
var moveX = 0;
var moveY = 0;
if (isDragging === true) {
moveX = mouseX - mouseOffsetX;
moveY = mouseY - mouseOffsetY;
// 范圍限定
// moveX > 0 且 moveX < (頁面最大寬度 - 浮層寬度)
// moveY > 0 且 moveY < (頁面最大寬度 - 浮層高度)
var pageWidth = document.documentElement.clientWidth;
var pageHeight = document.documentElement.clientHeight;
// 登錄浮層的寬、高
var dialogWidth = g('dialog').offsetWidth;
var dialogHeight = g('dialog').offsetHeight;
var maxX = pageWidth - dialogWidth;
var maxY = pageHeight - dialogHeight;
moveX = Math.min(maxX, Math.max(0, moveX));
moveY = Math.min(maxY, Math.max(0, moveY));
g('dialog').style.left = moveX + 'px';
g('dialog').style.top = moveY + 'px';
}
};
// 鼠標(biāo)事件3 -- 鼠標(biāo)松開
document.onmouseup = function() {
isDragging = false;
};
// 展現(xiàn)登錄浮層
function showDialog() {
g('dialog').style.display = 'block';
g('mask').style.display = 'block';
autoCenter(g('dialog'));
fillToBody(g('mask'));
}
// 隱藏登錄浮層
function hideDialog() {
g('dialog').style.display = 'none';
g('mask').style.display = 'none';
}
window.onresize = function() {
autoCenter(g('dialog'));
fillToBody(g('mask'));
};
showDialog();
autoCenter(g('dialog'));
</script>
</body>
</html>
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
您可能感興趣的文章:
- 原生JS實(shí)現(xiàn)可拖拽登錄框
- Javascript實(shí)現(xiàn)登錄框拖拽效果
- js實(shí)現(xiàn)百度登錄框鼠標(biāo)拖拽效果
- 百度Popup.js彈出框進(jìn)化版 拖拽小框架發(fā)布 兼容IE6/7/8,Firefox,Chrome
- javascript 網(wǎng)頁編輯框及拖拽圖片的問題
- js實(shí)現(xiàn)彈出框的拖拽效果實(shí)例代碼詳解
- 使用純JS實(shí)現(xiàn)checkbox的框選效果(鼠標(biāo)拖拽多選)
- JavaScript實(shí)現(xiàn)模態(tài)框拖拽效果
- HTML+CSS+JavaScript實(shí)現(xiàn)可拖拽模態(tài)框
- javascript實(shí)現(xiàn)登錄框拖拽
相關(guān)文章
javascript下拉列表中顯示樹形菜單的實(shí)現(xiàn)方法
這篇文章主要介紹了javascript下拉列表中顯示樹形菜單的實(shí)現(xiàn)方法,需要的朋友可以參考下2015-11-11
Ajax高級筆記 JavaScript高級程序設(shè)計(jì)筆記
這篇文章主要介紹了Ajax高級筆記 JavaScript高級程序設(shè)計(jì)筆記,需要的朋友可以參考下2017-06-06
關(guān)于Javascript作用域鏈的八點(diǎn)總結(jié)
其實(shí)吧,關(guān)于作用域鏈相關(guān)的文章我也看了不少,但是我一直也沒能做一個(gè)詳細(xì)的總結(jié),今天把我看到的一些東西,結(jié)合自己的想法,總結(jié)成以下8個(gè)點(diǎn)
2013-12-12
javascript中slice(),splice(),split(),substring(),substr()使用方法
這篇文章主要介紹了javascript中slice(),splice(),split(),substring(),substr()使用方法,需要的朋友可以參考下
2015-03-03
Javascript setInterval的兩種調(diào)用方法(實(shí)例講解)
這篇文章主要是對Javascript setInterval的兩種調(diào)用方法解析了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
2013-11-11 
