Прыгающее слайд-меню с помощью Jquery

#javascript #jquery #html #css #menu

#javascript #jquery #HTML #css #меню

Вопрос:

Я новичок в Jquery и довольно новичок в HTML / CSS, но поскольку я из тех, кто учится на собственном опыте, я создавал практический веб-сайт, изучая новые вещи, и экспериментировал с элементами, которые я хотел бы в конечном итоге реализовать на настоящем сайте.

Я пытался создать правильное меню слайдов, которое активируется при наведении курсора на пункты меню. Мне удалось заставить меню выдвигаться, но если я наведу курсор вниз на выдвинутое меню, все это начнет подпрыгивать! Я пробовал использовать .stop(), но потом он мигает!

Я нашел вопросы здесь и на других сайтах от людей с очень похожими (если не идентичными) проблемами, но я думаю, что я не понимаю ни одного из ответов, которые сработали для них. Мне нужны визуальные эффекты, и ответы типа «вставить оператор if () {}» меня смущают, потому что я не уверен, куда его поместить. Если я следую тому, что мой исходный материал предписывает мне делать (поместите оператор check / if в нижнюю функцию), кажется, что это просто нарушает код, а затем меню даже не выдвигаются.

Это было очень неприятно, и когда я слишком расстраиваюсь (например, через шесть часов) Я не могу хорошо подумать о решении, поэтому, если кто-нибудь может помочь мне найти ошибки в моем коде или дать мне довольно подробное объяснение того, что я мог бы сделать, чтобы исправить эту проблему с отскоком, и как это началось, я был бы очень признателен.

Я прикрепил JQ, HTML и CSS. Заранее спасибо.

 $(document).ready(function() {
    $('.dropdown').hover(
    function() {
        $(this).children(".sub-menu").slideDown(200);
    },
    function() {
        $(this).children(".sub-menu").slideUp(200);
    }
);

}); 
 nav {
  background-color: #000000;
  padding:10px 0;
  text-align:center;
}

nav li {
  margin: 10px;
  padding: 0 10px;
  display: inline;
}

nav ul {
  list-style-type:none;
  margin:0;
  padding:0;
}

nav a {
  font-size: 30px;
  height: 35px;
  line-height: 30px;
  color: #ffffff;
  text-decoration: none;
}

nav a:hover,
nav a:focus,
nav a:active {
  color: #ff0000;
}

nav ul li {
  display:inline-block;
  position:relative;
}

nav li ul {
  background-color:#000000;
  position:absolute;
  left:0;
  top:50px;
  width:200px;
}

nav li li a {
  position:relative;
  font-size:25px;
  margin:0;
  padding:0;
  display:block;
}

ul.sub-menu {
    display:none;
} 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav>
 <ul>
  <li><a href=""><b>Home</b></a></li>
  <li><a href="">About</a></li>
  <li><a href="">Inspiration</a></li>

  <li class="dropdown"><a href="">Find</a>
    <ul class="sub-menu">
      <li><a href="">Ebooks</a></li>
      <li><a href="">PDFs</a></li>
    </ul>
  </li>  

  <li><a href="">News</a></li>

  <li class="dropdown"><a href="">Contact Us</a>
    <ul class="sub-menu">
      <li><a href="">E-mail List</a></li>
      <li><a href="">Contact Us</a></li>
    </ul>
  </li>

  <li class="dropdown"><a href="">Extras</a>
    <ul class="sub-menu">
      <li><a href="">Coming Soon</a></li>
    </ul>
  </li>
 </ul>
</nav> 

Ответ №1:

У вас есть пробел между вашими <li> элементами и выпадающим меню (вы можете увидеть его здесь). Просто удалите / переместите его.

Я сделал

 nav {
  [...]
  // padding: 10px 0;
  padding: 0;
}
nav li {
  [...]
  // padding: 0 10px;
  padding: 10px;
}
 
 $(document).ready(function() {
    $('.dropdown').hover(
    function() {
        $(this).children(".sub-menu").slideDown(200);
    },
    function() {
        $(this).children(".sub-menu").slideUp(200);
    }
);

}); 
 nav {
  background-color: #000000;
  padding: 0;
  text-align:center;
}

nav li {
  margin: 10px;
  padding: 10px;
  display: inline;
}

nav ul {
  list-style-type:none;
  margin:0;
  padding:0;
}

nav a {
  font-size: 30px;
  height: 35px;
  line-height: 30px;
  color: #ffffff;
  text-decoration: none;
}

nav a:hover,
nav a:focus,
nav a:active {
  color: #ff0000;
}

nav ul li {
  display:inline-block;
  position:relative;
}

nav li ul {
  background-color:#000000;
  position:absolute;
  left:0;
  top:50px;
  width:200px;
}

nav li li a {
  position:relative;
  font-size:25px;
  margin:0;
  padding:0;
  display:block;
}

ul.sub-menu {
    display:none;
} 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav>
 <ul>
  <li><a href=""><b>Home</b></a></li>
  <li><a href="">About</a></li>
  <li><a href="">Inspiration</a></li>

  <li class="dropdown"><a href="">Find</a>
    <ul class="sub-menu">
      <li><a href="">Ebooks</a></li>
      <li><a href="">PDFs</a></li>
    </ul>
  </li>  

  <li><a href="">News</a></li>

  <li class="dropdown"><a href="">Contact Us</a>
    <ul class="sub-menu">
      <li><a href="">E-mail List</a></li>
      <li><a href="">Contact Us</a></li>
    </ul>
  </li>

  <li class="dropdown"><a href="">Extras</a>
    <ul class="sub-menu">
      <li><a href="">Coming Soon</a></li>
    </ul>
  </li>
 </ul>
</nav> 

Комментарии:

1. Что за черт? Это было так? CSS? Ради всего святого. Ну, это решило мою проблему. Спасибо, Robiseb.

Ответ №2:

Измените css в nav li ul top:50px том, где padding-top:23px

 $(document).ready(function() {
    $('.dropdown').hover(
    function() {
        $(this).children(".sub-menu").slideDown(200);
    },
    function() {
        $(this).children(".sub-menu").slideUp(200);
    }
);

}); 
 nav {
  background-color: #000000;
  padding:10px 0;
  text-align:center;
}

nav li {
  margin: 10px;
  padding: 0 10px;
  display: inline;
}

nav ul {
  list-style-type:none;
  margin:0;
  padding:0;
}

nav a {
  font-size: 30px;
  height: 35px;
  line-height: 30px;
  color: #ffffff;
  text-decoration: none;
}

nav a:hover,
nav a:focus,
nav a:active {
  color: #ff0000;
}

nav ul li {
  display:inline-block;
  position:relative;
}

nav li ul {
  background-color:#000000;
  position:absolute;
  left:0;
  padding-top:23px;
  width:200px;
}

nav li li a {
  position:relative;
  font-size:25px;
  margin:0;
  padding:0`;
  display:block;
}

ul.sub-menu {
    display:none;} 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav>
 <ul>
  <li><a href=""><b>Home</b></a></li>
  <li><a href="">About</a></li>
  <li><a href="">Inspiration</a></li>

  <li class="dropdown"><a href="">Find</a>
    <ul class="sub-menu">
      <li><a href="">Ebooks</a></li>
      <li><a href="">PDFs</a></li>
    </ul>
  </li>  

  <li><a href="">News</a></li>

  <li class="dropdown"><a href="">Contact Us</a>
    <ul class="sub-menu">
      <li><a href="">E-mail List</a></li>
      <li><a href="">Contact Us</a></li>
    </ul>
  </li>

  <li class="dropdown"><a href="">Extras</a>
    <ul class="sub-menu">
      <li><a href="">Coming Soon</a></li>
    </ul>
  </li>
 </ul>
</nav>