jQuery слайд вверх / вниз контента при наведении мыши через две секунды - ошибка
Когда мышь находится над изображением, содержимое промежутка сдвигается вниз через две секунды, также, когда я перемещаю курсор за пределы изображения, после сдвига промежутка в две секунды вверх, это работает нормально.
Я хочу, чтобы диапазон отображался, если кто-то тоже наведет указатель мыши на этот интервал, и там начинается моя проблема...
Я не знаю, был ли я достаточно ясен, но я думаю, что код скажет вам больше, чем слова:)
Ссылка: http://jsfiddle.net/zDd5T/3/
HTML:
<img id="image" src="button_green.png" />
<span id="content">
<a href="http://www.google.com">Link</a>
Some content here
</span>
CSS:
#image{
left:0px;
position:absolute;
z-index: 10;
}
#content{
top:48px;
left:0px;
position:absolute;
height: 100px;
border: 1px solid #f00;
display: block;
z-index: 0;
width: 100px;
}
JavaScript:
$(document).ready(function() {
$('#content').hide();
var over_img = false;
var over_span = false;
$('#image').live('mouseover', function() {
over_img = true;
setTimeout(function() {
$('#content').show('slide', {
direction: 'up'
}, 1000);
}, 2000);
});
$('#content').live('mouseover', function() {
over_span = true;
setTimeout(function() {
$('#content').show('slide', {
direction: 'up'
}, 1000);
}, 2000);
});
$('#image').live('mouseout', function() {
over_img = false;
if (!over_img && !over_span) {
setTimeout(function() {
$('#content').hide("slide", {
direction: "up"
}, 1000);
}, 2000);
}
});
$('#content').live('mouseout', function() {
over_span = false;
if (!over_img && !over_span) {
setTimeout(function() {
$('#content').hide("slide", {
direction: "up"
}, 1000);
}, 2000);
}
});
});
Заранее спасибо!
2 ответа
Для jQuery 1.7+ используйте on() вместо.live(), который не рекомендуется.
Я считаю, что это должно решить вашу проблему:
$(document).ready(function() {
var T1, T2;
$('#content').hide();
$('body').on({
mouseenter: function() {
clearTimeout(T2);
T1 = setTimeout(function() {
$('#content').slideDown(1000);
}, 2000);
},
mouseleave: function() {
clearTimeout(T1);
T2 = setTimeout(function() {
$('#content').slideUp(1000);
}, 2000);
}
}, '#image, #content');
});
Вот скрипка
Если я правильно понимаю вашу проблему, я бы перестроил вашу разметку следующим образом:
<div class="container">
<img ... >
<div class="content">
.....
</div>
</div>
Затем, вместо привязки вашего события наведения к изображению, вместо этого свяжите его с родительским контейнером. Таким образом, после отображения div содержимого он все еще находится в родительском элементе контейнера, с которым связано событие hover, поэтому он будет оставаться видимым, пока мышь находится над изображением, или div содержимого (или любым другим элементом). внутри контейнера)