点击“汉堡菜单”后看不到我的文本

时间:2019-07-16 07:13:31

标签: javascript html css visual-studio-code dom-events

我有三个文件index.html,style.css,app.js。

尝试制作响应式布局

我在 .nav-link li 下的CSS文件中将不透明度设置为0。 当我单击汉堡图标文本时,我想进行动画处理,即文本的不透明度应从0变为1(检查@keframe navLinkFade),然后该文本将出现。 但这不会发生。为什么

我已经正确调用了 app.js 中的所有功能。我想请看一下。

当我在CSS中将不透明度设为1时,它可以正常工作,但这不会给我带来褪色效果。

点击“汉堡”菜单之前的图像:

https://imgur.com/fzye2Hy

点击“汉堡”菜单后的图片

https://imgur.com/uQwTUOt

index.html

  const navSlide = () => {
      const burger = document.querySelector(".burger");
      const nav = document.querySelector(".nav-links");
      const navLinks = document.querySelectorAll(".nav-links li");
    
      burger.addEventListener("click", () => {
        nav.classList.toggle("nav-avtive");
    
        navLinks.forEach((link, index) => {
          if (link.style.animation) {
            link.style.animation = "";
          } else {
            link.style.animation = "navLinkFade 0.5s ease forwards ${index / 7}s";
          }
        });
      });
    };
    navSlide();
  * {
      margin: 0px;
      padding: 0px;
      box-sizing: border-box;
    }
    nav {
      display: flex;
      justify-content: space-around;
      align-items: center;
      min-height: 8vh;
      font-family: "Poppins", sans-serif;
      background-color: black;
    }
    .logo {
      color: whitesmoke;
      text-transform: uppercase;
      letter-spacing: 5px;
      font-size: 20px;
    }
    
    .nav-links {
      display: flex;
      justify-content: space-around;
      width: 30%;
    }
    .nav-links li {
      list-style: none;
    }
    .nav-links a {
      color: rgb(240, 172, 0);
      text-decoration: none;
      letter-spacing: 3px;
      font-weight: bold;
      font-size: 14px;
    }
    .burger {
      display: none;
    }
    .burger div {
      background-color: whitesmoke;
      height: 3px;
      width: 25px;
      margin: 5px;
      cursor: pointer;
    }
    @media screen and (max-width: 1024px) {
      .nav-links {
        width: 60%;
      }
    }
    
    @media screen and (max-width: 768px) {
      body {
        overflow-x: hidden;
      }
      .nav-links {
        position: absolute;
        right: 0px;
        height: 92vh;
        top: 8vh;
        background-color: black;
        display: flex;
        flex-direction: column;
        align-items: center;
        width: 50%;
        transform: translateX(100%);
        transition: transform 0.5s ease-in;
      }
      .nav-links li {
        opacity: 0;
      }
      .burger {
        display: block;
      }
    }
    .nav-avtive {
      transform: translateX(0%);
    }
    
    @keyframes navLinkFade {
      from {
        opacity: 0;
        transform: translateX(50px);
      }
      to {
        opacity: 1;
        transform: translateX(0px);
      }
    }
 <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <link rel="stylesheet" href="style.css">
        <link href="https://fonts.googleapis.com/css?family=Poppins&display=swap" rel="stylesheet">
        <title>Document</title>
        
      </head>
      <body>
        <nav>
          <div class="logo">
            <h4>The Nav</h4>
          </div>
          <ul class="nav-links">
            <li><a href="#">Home</a></li>
            <li><a href="#">About us</a></li>
            <li><a href="#">Contact</a></li>
          </ul>
    
          <div class="burger">
            <div class="line1"></div>
            <div class="line2"></div>
            <div class="line3"></div>
          </div>
        </nav>
        
        </div>
        <script src="app.js"></script>
      </body>
    </html>



  

我希望burgerMenu使用navLinkFade显示文本

4 个答案:

答案 0 :(得分:4)

.nav链接li opacity: 0是主要问题。更改不透明度即可使用。

@media screen and (max-width: 768px)
.nav-links li {
    opacity: 1;
}

对于动画,字符串应该用 ES6`而不是双引号引起来。因为在双引号内逻辑运算或变量不起作用。在双引号或单引号内 $ {index / 7} 被视为字符串。

link.style.animation = `navLinkFade 0.5s ease forwards ${index / 7}s`

答案 1 :(得分:1)

link.style.animation = "navLinkFade 0.5s ease forwards ${index / 7}s";不会插入动画字符串,因为您使用的是双引号,因此您需要使用反引号:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

答案 2 :(得分:1)

只需将双引号更改为反引号

link.style.animation = `navLinkFade 0.5s ease forwards ${index / 7}s`;

答案 3 :(得分:1)

尝试使用whereColumn / orWhereColumn / visibility: hidden代替visibility: visible

或者像opacityvisibility的组合