2

我有以下 jQuery 代码(取自此处某处的另一个问题):

$(document).ready(function(){
    $("#profile_dropdown").mouseenter(function(){
        clearTimeout($(this).data('timeoutId'));
        $("#profile_dropdown_content").fadeIn("slow");
    }).mouseleave(function(){
        var someElement = $("#profile_dropdown");
        var timeoutId = setTimeout(function(){
            $("#profile_dropdown_content").fadeOut("slow");
        }, 650);
        //set the timeoutId, allowing us to clear this trigger if the mouse comes back over
        someElement.data('timeoutId', timeoutId); 
    });
});

#profile_dropdown_content但是,它按预期工作 -如果鼠标移到它上面,我不知道如何保持显示。如果鼠标移出当然如何使它淡出...

有任何想法吗?

4

2 回答 2

2

嵌套#profile_dropdown_content#profile_dropdown容器内部并使用悬停事件。

jsfiddle:http: //jsfiddle.net/UsWYq/1/

JS

$(document).ready(function(){
    $("#profile_dropdown").hover(function(){
        clearTimeout($(this).data('timeoutId'));
        $("#profile_dropdown_content").fadeIn("slow");
    }, function(){
        var someElement = $("#profile_dropdown");
        var timeoutId = setTimeout(function(){
            $("#profile_dropdown_content").fadeOut("slow");
        }, 650);
        //set the timeoutId, allowing us to clear this trigger if the mouse comes back over
        someElement.data('timeoutId', timeoutId); 
    });
});

HTML

<div id="profile_dropdown">
    <div class="inner">Hover Me</div>
    <div id="profile_dropdown_content">Display Me</div>
</div>
<div id="profile_dropdown"></div>

CSS

#profile_dropdown {
    background:whitesmoke;
    float:left;
}
#profile_dropdown .inner {
    height:100px;
    width:100px;
}
#profile_dropdown_content {
    display:none;
    background:red;
    height:100px;
    width:100px;
}

选项 2

您可以做的另一件事是 CSS3 过渡:http: //jsfiddle.net/Ezxm5/

#profile_dropdown {
    background:whitesmoke;
    float:left;
}
#profile_dropdown:hover #profile_dropdown_content {
    display:block;
    opacity:1;
    height:100px;
}
#profile_dropdown .inner {
    height:100px;
    width:100px;
}
#profile_dropdown_content {
    opacity:0;
    background:red;
    height:0;
    width:100px;
    overflow:hidden;
    -webkit-transition: opacity 0.4s ease-in, height 0.4s ease-out;
    -moz-transition: opacity 0.4s ease-in, height 0.4s ease-out;
    -ms-transition: opacity 0.4s ease-in, height 0.4s ease-out;
    -o-transition: opacity 0.4s ease-in, height 0.4s ease-out;
    transition: opacity 0.4s ease-in, height 0.4s ease-out;
}​
​
于 2012-12-14T17:42:00.503 回答
2

将元素包装在另一个中,div然后将mouseenterandmouseleave函数绑定到包装器。

模拟 HTML

<div id="profile_wrapper">
    <div id="profile_dropdown">Profile Dropdown</div>
    <div id="profile_dropdown_content">This is some information about me.  I write code all day long.</div>
</div>

Javascript

$(document).ready(function(){
    $("#profile_wrapper").mouseenter(function(){
        clearTimeout($(this).data('timeoutId'));
        $("#profile_dropdown_content").fadeIn("slow");
    }).mouseleave(function(){
        var someElement = $("#profile_dropdown");
        var timeoutId = setTimeout(function(){
            $("#profile_dropdown_content").fadeOut("slow");
        }, 650);
        //set the timeoutId, allowing us to clear this trigger if the mouse comes back over
        someElement.data('timeoutId', timeoutId);
    });
});

http://jsfiddle.net/H7Hvf/1/

于 2012-12-14T17:50:12.217 回答