Skills/JavaScript

221116 full_down_lnb.html

개발자 윤구나 2022. 11. 16. 15:24
<!DOCTYPE html>
<html lang="ko">
  <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" />
    <title>jQuery_full_down_lnb</title>
    <script src="https://code.jquery.com/jquery-3.6.1.min.js"></script>
    <script src="./js/full_down.js"></script>
    <link rel="stylesheet" href="./css/full_down.css" />
  </head>
  <body>
    <div class="outer_header">
      <div class="inner_header">
        <header class="header">
          <ul class="lnb">
            <li class="m1">
              <a href="#">menu01</a>
              <ul>
                <li><a href="#">menu01-1</a></li>
                <li><a href="#">menu01-2</a></li>
                <li><a href="#">menu01-3</a></li>
                <li><a href="#">menu01-4</a></li>
              </ul>
            </li>
            <li class="m2">
              <a href="#">menu02</a>
              <ul>
                <li><a href="#">menu02-1</a></li>
                <li><a href="#">menu02-2</a></li>
                <li><a href="#">menu02-3</a></li>
                <li><a href="#">menu02-4</a></li>
              </ul>
            </li>
            <li class="m3">
              <a href="#">menu03</a>
              <ul>
                <li><a href="#">menu03-1</a></li>
                <li><a href="#">menu03-2</a></li>
                <li><a href="#">menu03-3</a></li>
                <li><a href="#">menu03-4</a></li>
              </ul>
            </li>
            <li class="m4">
              <a href="#">menu04</a>
              <ul>
                <li><a href="#">menu04-1</a></li>
                <li><a href="#">menu04-2</a></li>
                <li><a href="#">menu04-3</a></li>
                <li><a href="#">menu04-4</a></li>
              </ul>
            </li>
            <li class="m5">
              <a href="#">menu05</a>
              <ul>
                <li><a href="#">menu05-1</a></li>
                <li><a href="#">menu05-2</a></li>
                <li><a href="#">menu05-3</a></li>
                <li><a href="#">menu05-4</a></li>
              </ul>
            </li>
          </ul>
          <!--lnb-->
        </header>
      </div>
      <!--inner_header-->
    </div>
    <!--outer_header-->

    <div class="visual_main">visual_main</div>
  </body>
</html>
$(function () {
  const lnbLi = $(".lnb > li");
  const ul = $(".lnb > li > ul");
  const headerMin = $(".inner_header").height();
  const headerMax = headerMin + ul.innerHeight();
  let state = false;
  // state 외에 다른 단어를 써도 됨. 어떤 이벤트가 일어나서 상태 변화 했다면 이라는 뜻의 변수.

  lnbLi.mouseenter(function () {
    if (!state) {
      // 상태변화가 일어났다면 이라는 뜻
      $(".inner_header")
        .stop()
        .animate(
          {
            height: headerMax,
          },
          150,
          function () {
            ul.stop().fadeIn(150);
          }
        );
      state = true; // 브라우저에게 알려줘야함
    }

    $(this).find("ul").addClass("on");
  });

  lnbLi.mouseleave(function () {
    $(this).find("ul").removeClass("on");
  });

  $(".header").mouseleave(function () {
    ul.stop().fadeOut(150, function () {
      $(".inner_header").stop().animate(
        {
          height: headerMin,
        },
        150
      );
    });
    state = false; // 브라우저에게 알려줘야함
  });
});
* {
  margin: 0;
  padding: 0;
}

li {
  list-style: none;
}

a {
  color: #333;
  text-decoration: none;
}

.outer_header {
  width: 100%;
  height: 30px;
  position: relative;
}

.inner_header {
  width: 100%;
  height: 30px;
  background-color: white;
  border-bottom: 1px solid #333;
  position: absolute;
  top: 0;
  left: 0;
}

.header {
  width: 750px;
  margin: 0 auto;
}

.header .lnb {
  position: relative;
}

.header .lnb li {
  width: 150px;
  text-align: center;
  padding-bottom: 5px;
  float: left;
}

.header .lnb li ul {
  width: 140px;
  background-color: white;
  padding: 5px;
  position: absolute;
  top: 30px;
  left: 0;
  display: none;
}

.header .lnb li ul.on {
  background-color: #ccc;
}

.header .lnb li.m1 ul {
  left: 0;
}
.header .lnb li.m2 ul {
  left: 150px;
}
.header .lnb li.m3 ul {
  left: 300px;
}
.header .lnb li.m4 ul {
  left: 450px;
}
.header .lnb li.m5 ul {
  left: 600px;
}

.header .lnb li ul li a {
  display: block;
}

.header .lnb li li a:hover,
.header .lnb li li a:focus {
  color: red;
}

.visual_main {
  width: 100%;
  height: 300px;
  background-color: yellow;
  text-align: center;
  line-height: 300px;
}​