纯js实现拖拽弹窗的代码。思路:
鼠标点下(onmousedown):该事件内部要添加两个事件 ,移动事件 抬起事件(此事件内部含有移除移动事件)
1、获取鼠标在元素内的坐标(pageX Y ,对象距离左边的距离offsetLeft,相减, 就是鼠标点在元素内的位置的坐标)
2、鼠标移动弹层随移动(onmousemove), 始终获取对象距离左边和上边的坐标:需要获取pageX,pageY - 鼠标在元素内的位置
3、鼠标抬起:停止移动(移除移动事件)
来看张图就明白了了,黄色的 x y坐标 在点下和移动时,在颜色块区域中的位置是不变的。

1、css
.login_btn{
width: 100px;
height: 40px;
background: #48D1CC;
text-align: center;
line-height: 40px;
border-radius: 5px;
cursor: pointer;
border: 0
}
.bg{
position: fixed;
top:0;
left: 0;
z-index: 1;
width: 100%;
height: 100%;
background: rgba(0,0,0,.3);
display: none;
}
.login{
width: 512px;
height: 340px;
background: #F0FFFF;
position: fixed;
left: 50%;
top: 50%;
z-index: 99;
transform: translate(-50%,-50%);
}
.login_header{
width: 100%;
height: 40px;
background: #00BFFF;
line-height: 40px;
}
.login_header span{
float: right;
display: block;
margin-top: 5px;
margin-right: 10px;
cursor: pointer;
font-family: 'arial';
}2.html
<div id="content"> <button class="login_btn" onclick="loginLink();"> 登 录 </button> <div class="bg"> <div class="login"> <div class="login_header"><span onclick="closebtn();">X</span></div> 此弹层可以拖拽 </div> </div> </div>
3.js
var bg = document.querySelector('.bg');
//弹出层
function loginLink() {
bg.style.display = 'block'
}
//关闭弹层
function closebtn(){
bg.style.display = 'none';
}
var loginDiv = document.querySelector('.login');
//鼠标点下 添加移动事件
loginDiv.addEventListener('mousedown',function(e){
var x = e.pageX- loginDiv.offsetLeft;
var y = e.pageY - loginDiv.offsetTop;
function move(e){
loginDiv.style.left = e.pageX- x +'px';
loginDiv.style.top = e.pageY - y +'px';
}
//鼠标点下,添加移动事件
this.addEventListener('mousemove',move);
//鼠标抬起 移除移动事件
loginDiv.addEventListener('mouseup',function(){
this.removeEventListener('mousemove',move)
});
})本文为CSDN博主「淡泊-宁静致远」的原创文章,原文链接:https://blog.csdn.net/dingdinglaila/article/details/106670150
