我有以下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
。如果鼠标移开,如何让它渐渐消失...
有什么想法吗?
答案 0 :(得分: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;
}
答案 1 :(得分:2)
将元素换行到另一个div
,然后将mouseenter
和mouseleave
函数绑定到包装器。
模拟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);
});
});