效果如下:

代码如下:

<div class="clickBtn">点击,弹出登录框</div>
<div class="login">
<h3>登录会员</h3>
<table>
<tr>
<td class="left">用户名:</td>
<td><input type="text" placeholder="请输入用户名" name="" id=""></td>
</tr>
<tr>
<td class="left">登陆密码:</td>
<td><input type="text" placeholder="请输入登录密码" name="" id=""></td>
</tr>
</table>
<button>登录会员</button>
<div class="closebtn">关闭</div>
</div> <div class="mask"></div>

style:

<style>
* {
margin: 0;
padding: 0;
} .mask {
display: none;
position: absolute;
top: 0;
left: 0;
height: 100vh;
width: 100%;
background-color: rgba(0, 0, 0, .3);
} .clickBtn {
margin: 10px auto;
width: 200px;
border: 0px;
font-size: 20px;
font-weight: 700;
background-color: #fff;
cursor: pointer;
} .login {
visibility: hidden; position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); display: flex;
flex-direction: column;
align-items: center; padding: 20px;
box-sizing: border-box; width: 500px;
height: 300px;
border: 1px solid #eee;
background-color: #fff;
z-index: 1;
} .login h3 {
margin-bottom: 20px;
font-size: 20px;
font-weight: 400;
height: 30px;
width: 100%;
text-align: center;
cursor: move;
} .login table {
flex: 1;
display: flex;
margin: 0;
padding: 0; } .login table tr {
height: 50px;
text-align: right;
} .login table tr input {
width: 300px;
height: 30px;
border-radius: 2px;
border: 1px solid #eee;
} .login table .left {
font-weight: 400;
width: 40%;
} .login button {
width: 260px;
height: 40px;
background-color: #fff;
border: 1px solid #eee;
border-radius: 2px;
cursor: pointer;
} .login button:hover {
color: #fff;
background-color: skyblue;
} .login .closebtn {
position: absolute;
right: 0;
top: 0;
transform: translate(50%, -50%);
width: 50px;
height: 50px;
text-align: center;
line-height: 50px;
background-color: orange;
border-radius: 50%;
cursor: pointer;
}
</style>

js:

<script>
let btn = document.querySelector('.clickBtn')
let login = document.querySelector('.login')
let closebtn = document.querySelector('.closebtn')
let mask = document.querySelector('.mask') let title = document.querySelector('h3')
let body = document.querySelector('body')
btn.addEventListener('click', function () {
mask.style.display = 'block'
login.style.visibility = 'visible'
}) closebtn.addEventListener('click', function () {
mask.style.display = 'none'
login.style.visibility = 'hidden'
}) title.addEventListener('mousedown', function (e) {
let x = e.pageX - login.offsetLeft
let y = e.pageY - login.offsetTop
function move(e) {
// 如果此处仍然用 x=e.pageX - x;login.style.left=x+'px' 就会出现错误,因为这里是浅拷贝,引用的是同一个地址,而mousedown事件一直触发mousemove事件,导致x对应地址的值一直在改变,且login.style.left=x+'px' 指向的也是这个地址,所以页面的区域就会出现晃动
var xx = e.pageX - x;
var yy = e.pageY - y;
console.log(x, y);
login.style.top = yy + 'px';
login.style.left = xx + 'px'; } // 在页面任何地方都应触发mousemove,故监听document的mousemove事件
document.addEventListener('mousemove', move) // 在页面任何地方都应触发mouseup,故监听document的mouseup事件
document.addEventListener('mouseup', function () {
document.removeEventListener('mousemove', move)
})
})
</script>

js-模态框的拖动的更多相关文章

  1. 完美解决bootstrap模态框允许拖动后拖出边界的问题

    使用bootstrap3版本 在网上看了很多方法,我觉得jquery-ui的实现方法是最简单有效的,具体实现方法 1.下载并引入jquery-ui插件 2.全局添加模态框允许拖动事件 $(docume ...

  2. [TimLinux] JavaScript 模态框可拖动功能实现——jQuery版

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. JS模态框 简单案例

    演示: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8 ...

  4. js模态框实现原理

    <!DOCTYPE> <html> <head> <style>/* 定义模态对话框外面的覆盖层样式 */ #modal-overlay { visib ...

  5. 原生js模态框实现

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  6. [TimLinux] JavaScript 模态框可拖动功能实现——节流版

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. [TimLinux] JavaScript 模态框可拖动功能实现——原始版

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. js弹框3秒后自动消失

    开发中有时候会需要最出弹框后,过几秒自动消失的效果,下面给大家分享一下我自己做的一个小案例. 案例中的弹框使用的是bootstrap里面的模态框,实现自动消失则用的是js中的setInterval方法 ...

  9. Bootstrap——可拖动模态框(Model)

    还是上一个小项目,o(╥﹏╥)o,要实现点击一个div或者button或者一个东西然后可以弹出一个浮在最上面的弹框.网上找了找,发现Bootstrap的Model弹出框可以实现该功能,因此学习了一下, ...

  10. js控制Bootstrap 模态框(Modal)插件

    js控制Bootstrap 模态框(Modal)插件 http://www.cnblogs.com/zzjeny/p/5564400.html

随机推荐

  1. @click,@click.native失效问题(原生js代码innerHTML中填充vue页面,页面中点击事件失效)

    解决方式: window.mapVue = this <input onclick="window.mapVue.locusPath()" type="button ...

  2. Burpsuite 资料整理

    Burpsuite 资料整理, 整到一起比较方便.大家有更多关于Burpsuite的Tip请一起增量.谢谢! 插件 序号 名称 功能 参考文档 1 Turbo intruder 并发 https:// ...

  3. vue table表格form表单校验输入内容,elment ui table内容校验 form表单input验证

    //html 部分<el-form :model="formObj" :rules="rules"> <el-table :data=&quo ...

  4. Linux学习 --- 系统网络配置

    前言 : 如果一台计算机想接入互联网,必须配置好IP地址,子网掩码,网关,DNS服务器.在Linux系统中,这些信息都可以修改对应的配置文件来进行配置.临时配置一下网络可以使用一些简单的命令来进行配置 ...

  5. Javascript中求Date类型的差值、增加/减少秒/分钟/小时/天等

    最近需要对时间进行加减操作,以往需要取出具体时间后再加减,还需考虑进位问题很是麻烦 转载请注明出处: http://www.cnblogs.com/zaiyuzhong/p/date-operator ...

  6. 14.java 中缀表达式转后缀表达式

    思路如下: 1.初始化两个栈,运算符栈和中间结果栈 2.从左至右扫描 3.遇到数时直接压入s2 4.遇到运算符时,比较其与s1栈顶的优先级,有如下几种情况: 1)s1为空或栈顶为"(&quo ...

  7. vue3介绍-vue3创建项目-setup函数-ref和reactive-计算属性和监听-生命周期-toRefs-script setup的作用和lang=ts-vue后台管理模板

    目录 vue3介绍-vue3创建项目-setup函数-ref和reactive-计算属性和监听-生命周期-toRefs-script setup的作用和lang=ts-vue后台管理模板 昨日内容回顾 ...

  8. python3.7与python3.6,python2.7 pyc文件头部差异

  9. SwiftUI笔记

    @Published 标记对象定义的属性变更可以被监听,当对应字段变化时会触发对象 objectWillChange 通知,订阅了该属性的View也会收到值改变的通知 /// A type that ...

  10. rabbitMQ queue属性

    Map<String, Object> args = new HashMap<String, Object>(); args.put("x-message-ttl&q ...