Как сделать чтобы всплывающий блок не исчезал при наведении?
$(function () {
$("#ShowHide1").mouseover(function(){
$('#exemple1').slideToggle()
});
$("#ShowHide1").mouseout(function(){
$('#exemple1').slideUp()
});
});
Проблема в том что дочернего элемента нет
При наведении на блок (Скрыть/показать блок) всплывал блок с текстом, при наведении на него он не должен исчезать, но при наведении вне его границ он должен
Ответы (3 шт):
Можно поместить всё в общий блок. Тогда mouseover будет работать и на раскрывшемся блоке. И slideToggle тут лишний.
$("#ShowHide1").mouseover(function(){
$('#exemple1').slideDown()
});
$("#ShowHide1").mouseleave(function(){
$('#exemple1').slideUp()
});
#exemple1 {
display: none;
width: 100%;
height: 50px;
background: gray;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="ShowHide1">
<span>Скрыть/показать блок</span>
<div id="exemple1">БЛОК</div>
</div>
Можно и без общего блока следующим образом. Но тут есть свои минусы, если допустим между элементами будет пространство, то работать это не будет должным образом. Первый вариант как-то надежнее.
$("#ShowHide1").mouseover(function(){
$('#exemple1').slideDown()
});
$('#exemple1').mouseleave(function(){
$('#exemple1').slideUp()
})
$("#ShowHide1").mouseleave(function(){
if ($('#exemple1').is(':hover')) return
else $('#exemple1').slideUp()
});
#exemple1 {
display: none;
width: 100%;
height: 50px;
background: gray;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span id="ShowHide1">Скрыть/показать блок</span>
<div id="exemple1">БЛОК</div>
Зачем здесь скрипты, если всё легко можно сделать с помощью CSS?
Показываем дочерний элемент:
#exemple1 {
overflow: hidden;
width: 100%;
max-height: 0;
background: gray;
transition: max-height 0.5s;
}
#ShowHide1:hover #exemple1 {
max-height: 100px;
transition: max-height 2s;
}
<div id="ShowHide1">
<span>Скрыть/показать блок</span>
<div id="exemple1">БЛОК<br>БЛОК<br>БЛОК</div>
</div>
Показываем соседний элемент:
#exemple1 {
overflow: hidden;
width: 100%;
max-height: 0;
background: gray;
transition: max-height 0.5s;
}
#ShowHide1:hover~#exemple1,
#exemple1:hover {
max-height: 100px;
transition: max-height 2s;
}
<span id="ShowHide1">Скрыть/показать блок</span>
<div id="exemple1">БЛОК<br>БЛОК<br>БЛОК</div>
Ну вообще можно сделать не зависимые кнопки и блоки
Смотрим пример если надо закрыть вне box: codepen.io
let box = document.querySelector(".box");
document.querySelector("button").onmousemove = openBox;
document.querySelector(".box span").onclick = closeBox;
function openBox(){
box.classList.add("view");
}
function closeBox (){
box.classList.remove("view");
}
.box{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: #ccc;
padding: 20px 20px;
box-sizing: border-box;
z-index: 1000;
box-shadow: 0 0 100px rgba(0,0,0,0.2);
opacity: 0;
visibility: hidden;
transition: 0.2s linear;
}
.box span{
position: absolute;
right: 4px;
top: 4px;
font-size: 20px;
cursor: pointer;
transition: 0.14s linear;
display: inline-block;
}
.box:hover span{
color: red;
transform: scale(1.1);
}
.view{
opacity: 1;
visibility: visible;
}
<button class="open" type="button"> Показать окно</button>
<div class="box">
<span>×</span>
скрытый блок который появится после наведения
</div>