#jquery #html #css
#jquery #HTML #css
Вопрос:
У меня есть динамически созданное меню, которое я хочу скрыть и показать при наведении курсора мыши на заголовок меню. Когда пользователь не наводит курсор мыши на заголовок Или само меню, меню должно закрыться (анимировать высоту до 0).
Я не уверен, как проверить, парит ли пользователь над A или B.
Этот код работал, когда я был в состоянии использовать.функция hover () но она не работает с динамически создаваемыми элементами, поэтому сейчас я пытаюсь использовать .on() .
Вот моя попытка:
var mychapterMenuTimer = false;
$(document).on("mouseenter", "#chapterName, .chapterMenuContainer", (function() {
//mouse enter
clearTimeout(mychapterMenuTimer);
}), function() {
//mouse leav
mychapterMenuTimer = setTimeout(function() {
$('#chapterMenu').animate({
height: '0'
}, 444);
}, 100)
});
#chapterMenu {
width: 70%;
position: absolute;
top: 40px;
height: 0px;
overflow: hidden;
}
<-- dynamically created earlier -->
<p class="chapterName">
<div id="chapterMenu" class="menuHover">
<div class="row chapterMenuContainer">
<div class="col-6 chapterList1"></div>
<div class="col-6 chapterList2"></div>
</div>
</div>
Комментарии:
1. Вы можете добиться того же эффекта, который только в css намного проще.
2. @Frank Как я могу проверить в CSS, не зависаю ли я больше над двумя элементами, A или B?
Ответ №1:
Предполагая, что ваши классы и идентификаторы также не изменяются динамически, вы можете добиться всего этого в своем CSS-файле, используя :hover
селектор и CSS-переходы для анимационных эффектов, не напрягая свой мозг вокруг логики javascript.
Смотрите пример ниже;
#chapterMenu {
width: 200px;
position: absolute;
top: 80px;
height: 0px;
background-color:#ddd;
overflow: hidden;
/*animate height*/
transition: height 0.25s;
-webkit-transition: height 0.25s;
}
.chapter {
display: inline-block;
padding:10px 20px;
}
.chapter:hover #chapterMenu {
/*on chapter name hover set chapterMenu height */
height:100px;
}
<div class="chapter">
<p>Chapter 1</p>
<div id="chapterMenu" class="menuHover">
<div class="row chapterMenuContainer">
<div class="col-6 chapterList1"><a href="#">chapter1 list item 1</a></div>
<div class="col-6 chapterList2"><a href="#">chapter1 list item 2</a></div>
</div>
</div>
</div>
<div class="chapter">
<p>Chapter 2</p>
<div id="chapterMenu" class="menuHover">
<div class="row chapterMenuContainer">
<div class="col-6 chapterList1"><a href="#">chapter2 list item 1</a></div>
<div class="col-6 chapterList2"><a href="#">chapter2 list item 2</a></div>
</div>
</div>
</div>
Единственным недостатком CSS-анимации является ограниченная поддержка старых браузеров.
Комментарии:
1. Привет! Спасибо за вашу помощь! В вашем примере меню закрывается, когда вы пытаетесь что-то выбрать из него. Я бы хотел, чтобы он оставался открытым в обеих этих ситуациях: 1. Пользователь наводит курсор мыши на заголовок «Название главы» ИЛИ 2. Пользователь наводит курсор на само меню
2. Ах, я вижу, я немного отредактировал разметку, чтобы название главы стало разделом контейнера для меню. Устраняет эту проблему. C: