2

マウスが画像の上にあるとき、スパンコンテンツは2秒後に下にスライドします。また、カーソルを画像の外に移動すると、2秒後にスパンコンテンツが上にスライドします。これは問題なく機能します。

誰かがそのスパン上にマウスを移動した場合にもスパンを表示したいのですが、そこから問題が始まります...

私が十分に明確であったかどうかはわかりませんが、コードは言葉以上のものを教えてくれると思います:)

リンク: 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);
        }
    });
});

前もって感謝します!

4

2 に答える 2

0

私があなたの問題を正しく理解しているなら、私はあなたのマークアップを次のように再構築します:

<div class="container">
   <img ... >
   <div class="content">
     .....
   </div>
</div>

次に、ホバーイベントを画像にバインドする代わりに、親コンテナにバインドします。このように、コンテンツdivが表示されると、ホバーイベントがバインドされているコンテナの親要素内にあるため、マウスが画像またはコンテンツdiv(またはその他の要素)の上にある間も表示されたままになります。コンテナ内)

于 2012-03-02T00:56:16.857 に答える
0

jQuery 1.7以降では、非推奨の.live()の代わりにon()を使用してください。

私はこれがあなたの問題を解決するはずだと信じています:

$(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');
});​

これがフィドルです

于 2012-03-02T01:14:08.043 に答える