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 содержимого (или любым другим элементом). внутри контейнера)

Другие вопросы по тегам