Jquery: как добавить задержку в mouseleave, чтобы, если кто-то случайно зависает от элемента непреднамеренно, он все еще оставался открытым
плагин hoverintent противоположен тому, что мне нужно. У меня есть.всплывающее окно, которое вызывается .триггер, когда я парю над ним, я хочу .всплывающее окно, чтобы не затухать в течение нескольких секунд, но если я наведу курсор, затем наведите снова, отмените затухание, которое должно было произойти, и сохраните .всплывающее окно открыто.
кто-нибудь знает, как я это сделаю?
Это не работает, но это была идея:
$('.trigger').hover(function(){
$('.popup').fadeIn(600)
}, function() {
$('.popup').delay(2000, function(){
if ($(this).blur() = true) {
$('.popup').fadeOut(600)
}
});
})
4 ответов
jQuery плагин HoverIntent - это именно то, что ищете.
свойство timeout установит время, в течение которого мышь должна быть вне области до вызова функции out.
цитата с веб-сайта hover intent:
тайм-аут: Простая задержка в миллисекундах перед вызовом функции" out". Если пользователь возвращается к элементу до истечения тайм-аута, функция" out " не будет вызывается (также не будет вызываться функция "over"). Это в первую очередь для защиты от небрежных/человеческих траекторий, которые временно (и непреднамеренно) снимают пользователя с целевого элемента... дать им время вернуться. Тайм-аут по умолчанию: 0
чтобы настроить его...
$('.trigger').hoverIntent({
over: startHover,
out: endHover,
timeout: 2000
});
затем определите функции для обработки over
и out
function startHover(e){
//your logic here
$('.popup').fadeIn(600)
}
function endHover(){
//your logic here
$('.popup').fadeOut(600)
}
EDIT:
вы также можете настроить interval
свойство для увеличения / уменьшения время срабатывания функции startHover...значение по умолчанию-100 миллисекунд...вы можете установить его на ноль, чтобы запустить всплывающее окно, как только мышь войдет в область триггера, если хотите.
вот самый простой способ сделать это без дополнительных плагинов:
$('.trigger').hover(function() {
clearTimeout(this.timer);
$('.popup').fadeIn(600);
}, function() {
this.timer = setTimeout(function() {
if ($(this).blur() = true) { // off topic: you should to check this condition ;)
$('.popup').fadeOut(600);
}
}, 2000);
});
setTimeout () и clearTimeout () являются собственными функциями JS объекта окна HTML DOM с навсегда.
это работает для меня:
$(".triger").mouseenter(function() {
$(this).find("popup").fadeIn();
}).mouseleave(function() {
$(this).find("popup").delay(200).fadeOut();
});