gpt4 book ai didi

javascript - Web按钮只能使用一次,然后我必须刷新页面

转载 作者:行者123 更新时间:2023-12-05 00:30:29 25 4
gpt4 key购买 nike

我对网络开发有点陌生。作为我的第一个 JS 元素,我决定创建一个简单的按钮,如果有人点击它,它会显示一个自定义弹出窗口。但问题是关闭弹出窗口后,我必须刷新页面才能再次单击按钮。
到目前为止,这是我的代码:

const btn = document.querySelector('.btn');
const cloBtn = document.querySelector('.close');
const popUp = document.querySelector('.popup');
const overlay = document.querySelector('.overlay');

btn.addEventListener('click', () => {
popUp.classList.add('open');
overlay.classList.add('overlay-open');

});

cloBtn.addEventListener('click', () => {
popUp.classList.add('popClose');
overlay.classList.add('overlay-close');

})
body {
margin: 0%;
}

.btn {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

button {
border: none;
cursor: pointer;
}

.btn button {
background-color: blue;
padding: 15px 45px 15px 45px;
font-size: large;
font-weight: 700;
color: rgb(255, 255, 255);
border-radius: 10px;
}

.popup {
width: 300px;
background-color: rgb(228, 228, 228);
height: 150px;
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
gap: 15px;
border-radius: 10px;
z-index: 5;
position: absolute;
top: 30%;
left: 50%;
transform: scale(1) translate(-50%, -50%);
visibility: hidden;
}

.popup button {
background-color: rgb(255, 0, 55);
padding: 10px 30px 10px 30px;
font-size: medium;
font-weight: 700;
color: rgb(0, 0, 0);
border-radius: 10px;
}

.overlay {
height: 100%;
width: 100%;
background-color: rgba(133, 131, 131, 0.555);
position: absolute;
z-index: 2;
visibility: hidden;
}

.overlay-open {
visibility: visible;
}

.overlay-close {
visibility: hidden;
}

.open {
visibility: visible;
animation: boxPop 0.3s ease-in;
}

@keyframes boxPop {
from {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) scale(0);
}
to {
position: absolute;
top: 30%;
left: 50%;
transform: scale(1) translate(-50%, -50%);
}
}

.popClose {
animation: boxClo 0.3s ease-in;
transform: translate(-50%, -50%) scale(0);
}

@keyframes boxClo {
from {
position: absolute;
top: 30%;
left: 50%;
transform: scale(1) translate(-50%, -50%);
}
to {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) scale(0);
}
}
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Document</title>
</head>

<body>
<div class="btn"><button>Press Me</button></div>
<div class="popup">
<div class="sentence">Hello Nice to Meet You!</div>
<div class="close"><button>Close</button></div>
</div>
<div class="overlay"></div>

<script src="app.js"></script>
</body>

</html>

最佳答案

问题是,两个按钮都按下添加类但没有删除计数器类。最简单的解决方案是使用 toggle .在这种情况下,您可以将相同的 eventListener 绑定(bind)到两个按钮并大大缩短 JS 代码:

const btn = document.querySelectorAll('.btn');
const popUp = document.querySelector('.popup');
const overlay = document.querySelector('.overlay');

btn.forEach(el => el.addEventListener('click', () => {
popUp.classList.toggle('open');
overlay.classList.toggle('overlay-open');
}));
body {
margin: 0%;
}

.btn {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

button {
border: none;
cursor: pointer;
}

.btn button {
background-color: blue;
padding: 15px 45px 15px 45px;
font-size: large;
font-weight: 700;
color: rgb(255, 255, 255);
border-radius: 10px;
}

.popup {
width: 300px;
background-color: rgb(228, 228, 228);
height: 150px;
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
gap: 15px;
border-radius: 10px;
z-index: 5;
position: absolute;
top: 30%;
left: 50%;
transform: scale(1) translate(-50%, -50%);
visibility: hidden;
}

.popup button {
background-color: rgb(255, 0, 55);
padding: 10px 30px 10px 30px;
font-size: medium;
font-weight: 700;
color: rgb(0, 0, 0);
border-radius: 10px;
}

.overlay {
height: 100%;
width: 100%;
background-color: rgba(133, 131, 131, 0.555);
position: absolute;
z-index: 2;
visibility: hidden;
}

.overlay-open {
visibility: visible;
}

.overlay-close {
visibility: hidden;
}

.open {
visibility: visible;
animation: boxPop 0.3s ease-in;
}

@keyframes boxPop {
from {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) scale(0);
}
to {
position: absolute;
top: 30%;
left: 50%;
transform: scale(1) translate(-50%, -50%);
}
}

.popClose {
animation: boxClo 0.3s ease-in;
transform: translate(-50%, -50%) scale(0);
}

@keyframes boxClo {
from {
position: absolute;
top: 30%;
left: 50%;
transform: scale(1) translate(-50%, -50%);
}
to {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) scale(0);
}
}
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Document</title>
</head>

<body>
<div class="btn"><button>Press Me</button></div>
<div class="popup">
<div class="sentence">Hello Nice to Meet You!</div>
<div class="btn"><button>Close</button></div>
</div>
<div class="overlay"></div>

<script src="app.js"></script>
</body>

</html>

关于javascript - Web按钮只能使用一次,然后我必须刷新页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72699146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com