Вы можете легко это сделать. Шаги должны следовать:
1) Имейте 3 блока, таких как DIVs или UL LI, и добавьте скрытый контейнер внутри (или это не имеет значения, если вы установите положение с помощью jQuery.
Если ваша структура будет:
<div class="block">
<div class="invisible"></div>
<div class="visible"></div>
</div>
2) Прикрепить события mouseenter и mouseleave ко всем 3 блокам, например:
$('.block').mouseenter(function() {
// some code to show the hidden container
$(this).find('.visible').show().addClass('visible_container');
});
$('.block').mouseleave(function() {
// some other code to hide the shown container
$('.visible_container').hide(); // Hide all the instances of .visible_container
});
3) Вам следует изменить JS или CSS в соответствии с методами позиционирования для ваших элементов, чтобы при вызове show()
элемент отображался прямо над элементом. Например, если у вас скрытый блок будет иметь правило CSS position: absolute
, вы должны использовать:
$(this).find('.visible')
.show()
.addClass('visible_container')
.css('top', $(this).offset().top+'px')
.css('left', $(this).offset().left+'px');
В этом случае показанный контейнер будет отрегулирован в правый верхний угол навесного блока.
Поскольку скрытый контейнер является дочерним по отношению к контейнеру блоков, событие mouseleave вызываться не будет, поэтому оно будет отображаться правильно.