JavaScript 系列三:練習3
modal 互動視窗元件
by applelily
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JavaScript 系列三:練習3 ── modal 互動視窗元件</title>
<link rel="stylesheet" href="./js_modal.css">
</head>
<body>
<button class="btn-login" onclick="loginModal()">點我登入帳號</button>
<hr>
<button class="btn-post" onclick="postModal()">點我新增貼文</button>
<div class="modal_wrap">
<div class="modal" id="login-modal">
<h1>Login</h1>
<div>帳號:
<input type="text">
</div>
<div>密碼:
<input type="password">
</div>
<hr>
<button id="btn-close-login" class="btn-close">關閉
</button>
</div>
<div class="modal" id="post-modal">
<h1>Post</h1>
<div>標題:<input type="text"></div>
<div>內文:<textarea></textarea></div>
<hr>
<button id="btn-close-post" class="btn-close">關閉</button>
</div>
</div>
</body>
<script src="./js_modal.js"></script>
</html>
CSS
.btn-login, .btn-post{
margin: 30px auto;
padding: 10px 15px;
font-size: 16px;
}
.btn-login {
border: 2px solid #ffc0cb;
background-color: #f6a3a3;
}
.btn-post{
border: 2px solid #58a05c;
background-color: #59855e;
}
.btn-login:hover, .btn-post:hover{
cursor:pointer
}
.btn-login:active , .btn-post:active{
scale: 90%;
}
.modal_wrap{
display:none;
position: fixed;
z-index: 1;
padding-top: 100px;
left:0;
top:0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgba(0,0,0,0.4);
animation: showModal 1s ease-out forwards; /* 新增動畫 */
}
/* 定義動畫規則 */
@keyframes showModal {
from {
opacity: 0; /* 從透明度 0 開始 */
}
to {
opacity: 1; /* 透明度達到 1 */
}
}
#login-modal,#post-modal {
max-width: 375px;
min-height: 445px;
background-color: #242424;
color:#F2F2F2;
margin: auto;
padding : 20px 20px 0px 40px;
border: 1px solid #888;
border-radius: 10px;
line-height: 4.5em;
font-size: 18px;
}
input{
width: 200px;
height: 35px;
border-radius: 20px;
padding-left: 15px;
}
#btn-close-login{
background-color: #f6a3a3;
color:#242424;
font-size: 16px;
width: 55px;
margin-left:80%
}
#post-modal{
padding : 20px 20px 0px 40px;
line-height: 4.5em;
}
#post-modal input{
width: 250px;
border-radius:0px;
padding-left: 6px;
}
textarea{
min-height: 200px;
width: 250px;
padding: 6px;
}
#login-modal h1 {
color: #f6a3a3;
}
#post-modal h1 {
color: #59855e;
}
#btn-close-post{
background-color: #59855e;
color:#242424;
font-size: 16px;
width: 55px;
margin-left:80%
}
JavaScript
let block_modal = document.querySelectorAll('.modal');
// 初始化class:modal, 設定 全部 modal 的 display: none
function init_block_modal(){
block_modal.forEach(
function(modal){
modal.style.display="none";
}
)
}
let elem_modal_wrap =
document.querySelector('.modal_wrap');
function close_modal(btn){
btn.onclick= function(){
elem_modal_wrap.style.display="none" ;
}
}
function loginModal(){
elem_modal_wrap.style.display="block";
let block_login = document.querySelector('#login-modal');
init_block_modal();
block_login.style.display="block";
let btn = document.querySelector('#btn-close-login');
close_modal(btn);
}
function postModal(){
elem_modal_wrap.style.display="block";
let block_post = document.querySelector('#post-modal');
init_block_modal();
block_post.style.display="block";
let btn = document.querySelector('#btn-close-post');
close_modal(btn);
}