事件目标属性
事件输入的目标属性是对事件被分派到的对象的引用,与在冒泡或者捕获阶段调用事件处理程序时的 Event.currentTarget 相对。
弹出表单是在上创建对话框的好方法。
我们可以为站点创建弹出式登录表单、联系表单或者任何其他类型的表单。
弹出按钮将位于访问者的眼睛下方。
当用户单击弹出按钮时,表单将出现在屏幕上。
其中我们可以学习如何使用 JavaScript 创建弹出式表单。
对 openForm() 使用 display = "block" 对 closeForm() 函数使用 display = "none" 以在单击时显示和关闭表单:
function openTheForm() {
document.getElementById("popupForm").style.display = "block";
}
function closeTheForm() {
document.getElementById("popupForm").style.display = "none";
}
使用 JavaScript 的弹出表单示例:
<!DOCTYPE html>
<html>
<head>
<title>文档的标题</title>
<style>
* {
box-sizing: border-box;
}
.openBtn {
display: flex;
justify-content: left;
}
.openButton {
border: none;
border-radius: 5px;
background-color: #1c87c9;
color: white;
padding: 14px 20px;
cursor: pointer;
position: fixed;
}
.loginPopup {
position: relative;
text-align: center;
width: 100%;
}
.formPopup {
display: none;
position: fixed;
left: 45%;
top: 5%;
transform: translate(-50%, 5%);
border: 3px solid #999999;
z-index: 9;
}
.formContainer {
max-width: 300px;
padding: 20px;
background-color: #fff;
}
.formContainer input[type=text],
.formContainer input[type=password] {
width: 100%;
padding: 15px;
margin: 5px 0 20px 0;
border: none;
background: #eee;
}
.formContainer input[type=text]:focus,
.formContainer input[type=password]:focus {
background-color: #ddd;
outline: none;
}
.formContainer .btn {
padding: 12px 20px;
border: none;
background-color: #8ebf42;
color: #fff;
cursor: pointer;
width: 100%;
margin-bottom: 15px;
opacity: 0.8;
}
.formContainer .cancel {
background-color: #cc0000;
}
.formContainer .btn:hover,
.openButton:hover {
opacity: 1;
}
</style>
</head>
<body>
<h2>Popup Form</h2>
<p>单击“打开表单”按钮以打开弹出表单。</p>
<div class="openBtn">
<button class="openButton" onclick="openForm()">打开表单</button>
</div>
<div class="loginPopup">
<div class="formPopup" id="popupForm">
<form action="/action_page.php" class="formContainer">
<h2>Please Log in</h2>
<label for="email">
E-mail
</label>
<input type="text" id="email" placeholder="Your Email" name="email" required>
<label for="psw">
Password
</label>
<input type="password" id="psw" placeholder="Your Password" name="psw" required>
<button type="submit" class="btn">Log in</button>
<button type="button" class="btn cancel" onclick="closeForm()">Close</button>
</form>
</div>
</div>
<script>
function openForm() {
document.getElementById("popupForm").style.display = "block";
}
function closeForm() {
document.getElementById("popupForm").style.display = "none";
}
</script>
</body>
</html>
也可以通过单击框外的任意位置来分离模式框并关闭它。
为此,我们只需要使用返回触发事件的元素的目标事件属性:
function openForm() {
document.getElementById("loginPopup").style.display = "block";
}
function closeForm() {
document.getElementById("loginPopup").style.display = "none";
}
//当用户点击模态框之外的任何地方时,关闭它
window.onclick = function (event) {
let modal = document.getElementById('loginPopup');
if (event.target == modal) {
closeForm();
}
}
让多个 Popup Forms 使用 data-global 属性并不太难。
data-属性用于存储页面私有的自定义数据。
其中我们使用数据模式属性:
let modalBtns = [...document.querySelectorAll(".button")];
modalBtns.forEach(function (btn) {
btn.onclick = function () {
let modal = btn.getAttribute('data-modal');
document.getElementById(modal).style.display = "block";
}
});
let closeBtns = [...document.querySelectorAll(".close")];
closeBtns.forEach(function (btn) {
btn.onclick = function () {
let modal = btn.closest('.modal');
modal.style.display = "none";
}
});
window.onclick = function (event) {
if (event.target.className === "modal") {
event.target.style.display = "none";
}
}
在一页中设置多个弹出表单的示例:
<!DOCTYPE html>
<html> <head>
<title>文档的标题</title>
<style>
.modal {
display: none;
position: fixed;
z-index: 8;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgb(0, 0, 0);
background-color: rgba(0, 0, 0, 0.4);
}
.modal-content {
margin: 50px auto;
border: 1px solid #999;
width: 60%;
}
h2,p {
margin: 0 0 20px;
font-weight: 400;
color: #999;
} span {
color: #666;
display: block;
padding: 0 0 5px;
}
form {
padding: 25px;
margin: 25px;
box-shadow: 0 2px 5px #f5f5f5;
background: #eee;
}
input,
textarea {
width: 90%;
padding: 10px;
margin-bottom: 20px;
border: 1px solid #1c87c9;
outline: none;
}
.contact-form button {
width: 100%;
padding: 10px;
border: none;
background: #1c87c9;
font-size: 16px;
font-weight: 400;
color: #fff;
}
button:hover {
background: #2371a0;
}
.close {
color: #aaa;
float: right;
font-size: 28px;
font-weight: bold;
}
.close:hover,
.close:focus {
color: black;
text-decoration: none;
cursor: pointer;
}
button.button {
background: none;
border-top: none;
outline: none;
border-right: none;
border-left: none;
border-bottom: #02274a 1px solid;
padding: 0 0 3px 0;
font-size: 16px;
cursor: pointer;
}
button.button:hover {
border-bottom: #a99567 1px solid;
color: #a99567;
}
</style>
</head>
<body>
<h2>Multiple Popup Forms</h2>
<p>
<button class="button" data-modal="modalOne">Contact Us</button>
</p>
<p>
<button class="button" data-modal="modalTwo">Send a Compliant Form</button>
</p>
<div id="modalOne" class="modal">
<div class="modal-content">
<div class="contact-form">
<a class="close">×</a>
<form action="/">
<h2>Contact Us</h2>
<div>
<input class="fname" type="text" name="name" placeholder="Full name">
<input type="text" name="name" placeholder="Email">
<input type="text" name="name" placeholder="Phone number">
<input type="text" name="name" placeholder="Website">
</div>
<span>Message</span>
<div>
<textarea rows="4"></textarea>
</div>
<button type="submit" href="/">Submit</button>
</form>
</div>
</div>
</div>
<div id="modalTwo" class="modal">
<div class="modal-content">
<div class="contact-form">
<span class="close">×</span>
<form action="/">
<h2>Complaint form</h2>
<div>
<input class="fname" type="text" name="name" placeholder="Full name">
<input type="text" name="name" placeholder="Email">
<input type="text" name="name" placeholder="Phone number">
<input type="text" name="name" placeholder="Website">
</div>
<span>Message</span>
<div>
<textarea rows="4"></textarea>
</div>
<button type="submit" href="/">Submit</button>
</form>
</div>
</div>
</div>
<script>
let modalBtns = [...document.querySelectorAll(".button")];
modalBtns.forEach(function(btn) {
btn.onclick = function() {
let modal = btn.getAttribute('data-modal');
document.getElementById(modal)
.style.display = "block";
}
});
let closeBtns = [...document.querySelectorAll(".close")];
closeBtns.forEach(function(btn) {
btn.onclick = function() {
let modal = btn.closest('.modal');
modal.style.display = "none";
}
});
window.onclick = function(event) {
if(event.target.className === "modal") {
event.target.style.display = "none";
}
}
</script>
</body>
</html>
日期:2020-06-02 22:16:14 来源:oir作者:oir
