在日常的开发中,咱们常常须要点击一个按钮提供交互,弹出对话框,输出一些信息。
本篇文章的代码,另外增加了背景彩色遮罩以及能够任意拖拽对话框。
应用到的js知识点:onclick、onmousedown、onmouseup、onmousemove、鼠标地位
效果图gif:
可任意拖拽:
细节:
上代码:
index.html
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="index.css"> </head> <body> <input type="button" id="open" value="点击按钮关上弹框"> <div id="container"> <!-- 背景彩色遮罩 --> <div id="hidden"></div> <div id="box"> <strong id="close">敞开</strong> <span>输出账号:<input type="text" placeholder="输出账号"></span> <span>输出明码:<input type="password" placeholder="输出明码"></span> <input type="button" value="登录" id="login"> </div> </div> <script src="common.js"></script> <script> var open = my$('open'); var box = my$('box'); var hidden = my$('hidden'); var close = my$('close'); open.onclick = function () { box.style.display = 'flex'; hidden.style.display = 'block'; } close.onclick = function () { box.style.display = 'none'; hidden.style.display = 'none'; // 敞开后复原box到原来的默认地位 box.style.top = '200px'; box.style.left = ''; } box.onmousedown = function (e) { e = e || window.event; // 盒子的地位 var x = getPage(e).pageX - box.offsetLeft; var y = getPage(e).pageY - box.offsetTop; document.onmousemove = function (e) { e = e || window.event; box.style.left = getPage(e).pageX - x + 'px'; box.style.top = getPage(e).pageY - y + 'px'; } } document.onmouseup = function () { document.onmousemove = null; } </script> </body></html>
index.css
body { background-color: #324266;}#container { display: flex; justify-content: center;}/* 关上按钮 */#open { background-color: #52699e; border: none; height: 30px; width: 200px; border-radius: 10px; color: #fff; outline: none; cursor: pointer;}#open:hover { background-color: #4a5f8f;}/* 背景遮罩 */#hidden { width: 100%; height: 100%; position: fixed; top: 0; left: 0; background-color: #000000; opacity: 0.3; display: none;}/* 盒子 */#box { color: #fff; width: 400px; height: 200px; background-color: #40527e; display: none; flex-direction: column; border-radius: 10px; align-items: center; padding-top: 50px; box-sizing: border-box; position: absolute; top: 200px; cursor: move;}/* 敞开按钮 */#close { position: absolute; top: 5px; right: 5px; font-weight: normal; display: block; width: 50px; height: 25px; line-height: 25px; text-align: center; border-radius: 20px; color: #7a9ae4;}#close:hover { background-color: #52699e; cursor: pointer;}/* 输入框 */#box input { width: 200px; height: 25px; border-radius: 25px; border: none; outline: none; padding-left: 20px; background-color: #536a9e; color: #fff;}/* 扭转placeholder的值 */#box input::-webkit-input-placeholder { color: rgb(255, 255, 255); opacity: 0.4;}#box input:first-child { margin-bottom: 20px;}/* 登录按钮 */#box #login { cursor: pointer; width: 300px; height: 30px; background-color: #02a0a0;}#box #login:hover { background-color: #019191;}
common.js
function my$(id) { return document.getElementById(id);}// 获取鼠标在页面的地位,解决浏览器兼容性function getPage(e) { var pageX = e.pageX || e.clientX + getScroll().scrollLeft; var pageY = e.pageY || e.clientY + getScroll().scrollTop; return { pageX: pageX, pageY: pageY }}