Toogle和后台JavaScript

umuewwlo  于 2023-03-21  发布在  Java
关注(0)|答案(1)|浏览(77)

我在学习JavaScript时遇到了一个问题。我想在打开div时制作动画,在通过单击按钮关闭它时制作动画,但只有在打开div时才有动画,而在关闭时无法制作动画,我该如何做到这一点?我还有另一个问题,即如何禁用div,而不仅仅是通过单击“x”但是当我点击屏幕上没有div的任何地方时。

let btn = document.getElementById('btn-close');
let fo = document.getElementById('fo');
let btnk = document.getElementById('btnk');
let btnk1 = document.getElementById('btnk1');
let btnk2 = document.getElementById('btnk2');
let btnk3 = document.getElementById('btnk3');
fo.style = "display: block;"
fo.classList.toggle("fo");
btn.addEventListener('click',function(){
    fo.classList.toggle("fo");
});
btnk.addEventListener('click',function(){
    fo.classList.toggle("fo");
});
btnk1.addEventListener('click',function(){
    fo.classList.toggle("fo");
});
btnk2.addEventListener('click',function(){
    fo.classList.toggle("fo");
});
btnk3.addEventListener('click',function(){
    fo.classList.toggle("fo");
});
.fo{
  position: fixed;
  margin-left: auto;
  margin-right: auto;
  width: 100%;
  height: 100%;
  display: none;
  animation: ani 0.5s ease;
}
.btn-form-close {
    border: 0;
    font-size: 3rem;
    position: absolute;
    top: -2%;
    width: 0;
    height: 0;
    right: 10%;
    line-height: normal;
    cursor: pointer;
}
@keyframes ani {
    0% {
        transform: translateX(-850px);
    }
    100%{
        transform: translateX(0px);
    }
}
@keyframes ani2 {
    0% {
        transform: translateX(0px);
    }
    100%{
        transform: translateX(850px);
    }
}
<div id="fo" class="fo">
  <div style="background-color: #000; transform: translate(50%,30%); border-radius: 30px; height: 70%; width: 50%;">
    <button id="btn-close" style="border: 0; background-color: #000; margin-top: 2%; font-size: 3rem; color: white; float: right;"><span class="btn-form-close">&times;</span></button>
</div>
 <button id="btnk" class="but-oferts">Otworz</button>
 <button id="btnk1" class="but-oferts">Otworz</button>
 <button id="btnk2" class="but-oferts">Otworz</button>
 <button id="btnk3" class="but-oferts">Otworz</button>

谢谢大家的帮助!〈3
我尝试使用event.target,但它不工作。

1l5u6lss

1l5u6lss1#

HTML

  • fo div中添加了data属性,以跟踪它是打开还是关闭
  • 将内部按钮更改为span以删除屏幕上显示在关闭菜单按钮旁边的行
  • 在按钮前添加关闭div标记,以将它们与菜单分开
<div id="fo" class="fo" data-active="false">
  <div style="background-color: #000; transform: translate(50%,30%); border-radius: 30px; height: 70%; width: 50%;">
    <span id="btn-close" style="border: 0; background-color: #000; margin-top: 2%; font-size: 3rem; color: white; float: right;">
      <span class="btn-form-close">&times;</span>
    </span>
  </div>
</div>
<button id="btnk" class="but-oferts">Otworz</button>
<button id="btnk1" class="but-oferts">Otworz</button>
<button id="btnk2" class="but-oferts">Otworz</button>
<button id="btnk3" class="but-oferts">Otworz</button>

CSS

  • 使用id而不是classfo div作为目标
  • 使用transform和translateX将动画更改为过渡。用于决定向左或向右移动(850 px或-850px)的选择器取决于数据属性(例如#fo[data-active='false']
#fo{
  z-index: 2;
  position: fixed;
  margin-left: auto;
  margin-right: auto;
  width: 100%;
  height: 100%;
  left: -850px;
  display: block;
  transition: transform 0.5s ease;
}
#fo[data-active='false'] {
  transform: translateX(-850px);
} 
#fo[data-active='true'] {
  transform: translateX(850px);
}
.btn-form-close {
    border: 0;
    font-size: 3rem;
    position: absolute;
    top: -2%;
    width: 0;
    height: 0;
    right: 10%;
    line-height: normal;
    cursor: pointer;
}

JS

  • 将下面的代码组合成一个名为toggleMenu()的函数,这样就不会重复了
  • 您不需要使用此方法切换类,以便删除
  • 将当前打开状态存储在一个名为active的变量中,然后使用toggleMenu()函数(三元运算符)将其设置为相反状态
  • 对所有四个按钮使用此功能
let btn = document.getElementById('btn-close');
let fo = document.getElementById('fo');
let btnk = document.getElementById('btnk');
let btnk1 = document.getElementById('btnk1');
let btnk2 = document.getElementById('btnk2');
let btnk3 = document.getElementById('btnk3');

function toggleMenu() {
  const active = fo.dataset.active
  fo.dataset.active = active == 'true' ? 'false' : 'true'
}

btn.addEventListener('click',function(){
    toggleMenu()
});
btnk.addEventListener('click',function(){
    toggleMenu()
});
btnk1.addEventListener('click',function(){
    toggleMenu()
});
btnk2.addEventListener('click',function(){
    toggleMenu()
});
btnk3.addEventListener('click',function(){
    toggleMenu()
});

相关问题