JavaScript实现登录框拖拽

<!DOCTYPE html >
< html lang= "en" >
< head >
< meta charset= "UTF-8" >
< meta name= "viewport" content= "width=device-width, initial-scale=1.0" >
< meta http-equiv= "X-UA-Compatible" content= "ie=edge" >
< title >拖拽 </ title >
< style >
*{ margin: 0; padding: 0;}
body,textarea,select,input,button{
font-size: 12px;
color:white;
font-family: Arial, Helvetica, sans-serif;
-webkit-text-size-adjust: none; /* 文本大小根据设备尺寸进行调整 auto,none不调整 */
}
.fl-l{ float: left;}
.fl-r{ float: right;}
.clearfix:after{
visibility: hidden;
display: block;
font-size: 0;
content: '';
clear:both;
height: 0;}
/* .clearfix{ *zoom:1;} */
#dialog{
height: 200px;
width: 400px;
background-color: #EAF6DB;
border: 1px solid lightslategray;
position:absolute;
top: 200px;
left: 400px;
}
.dialog-title{
height: 40px;
line-height: 40px;
background-color: #3a3333;
cursor: move;
}
.login,.close{
display: inline-block;
margin: 0 15px;
}
< / style >
</ head >
< body >
< div id= "dialog" >
< div id= "dialog-title" class= "dialog-title clearfix" >
< span class= "fl-l login" >登录 </ span >
< span class= "fl-r close" >X </ span >
</ div >
</ div >
< script >
window.οnlοad= function(){
//允许点击鼠标获取拖拽事件区域
var oDialog_title=document.getElementById( "dialog-title");
//登录窗口
var oDialog=oDialog_title.parentNode;

//初始化鼠标默认位置
var iDisX= 0;
var iDisY= 0;

//为获取到的DOM元素添加鼠标按下事件 onmousedown
oDialog_title.οnmοusedοwn= function(e){
//保存鼠标事件对象
var oEvent=e||event;

//计算鼠标位于弹出框内的位置
iDisX=oEvent.clientX-oDialog.offsetLeft; //鼠标X轴位置-弹出框X外左边框
IDisY=oEvent.clientY-oDialog.offsetTop; //鼠标Y轴位置-弹出框Y外上边框
console.log(iDisX,iDisY);

//点击弹出框后拖动鼠标,移动弹出框
document.οnmοusemοve= function(e){
var oEvent=e||event;
// oDialog.style.left=oEvent.clientX-iDisX+"px";
// oDialog.style.top=oEvent.clientY-iDisY+"px";

//优化,禁止登录窗口拖拽出文档可视区域,保存登录窗口在文档中的具体位置
var iCurrentDialogDisLift=oEvent.clientX-iDisX; //登录窗口当前X具体值
var iCurrentDialogDisTop=oEvent.clientY-iDisY;

//检测当前登录窗口X轴是否位于文档可视区域内
if(iCurrentDialogDisLift< 0){
iCurrentDialogDisLift= 0;
} else if(iCurrentDialogDisLift>document.documentElement.clientWidth-oDialog.offsetWidth){
//当前文档X轴可视区域大小包括左右框线宽度-登录窗口X轴区域内大小包括左右框线宽度
iCurrentDialogDisLift=document.documentElement.clientWidth-oDialog.offsetWidth;
}

//检测当前登录窗口Y轴是否位于文档可视区域内
if(iCurrentDialogDisTop< 0){
iCurrentDialogDisTop= 0;
} else if(iCurrentDialogDisTop>document.documentElement.clientHeight-oDialog.offsetHeight){
iCurrentDialogDisTop=document.documentElement.clientHeight-oDialog.offsetHeight;
}

oDialog.style.left=iCurrentDialogDisLift+ "px";
oDialog.style.top=iCurrentDialogDisTop+ "px";
};

//当点击鼠标拖动弹出框,抬起鼠标时
document.οnmοuseup= function(){
//清除弹出框的移动事件及本身
document.οnmοusemοve= null;
document.οnmοuseup= null;
}

//阻止默认事件,如果不加这个阻止默认事件,在firefox下会有一个获取焦点的光标一直在闪动,在3.0及以下会出现拖动重影的情况
return false;
}
}
< / script >
</ body >
</ html >
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值