2012-12-14 96 views
2

我有以下的jQuery代碼(採取從另一個問題在這裏某處):保持DIV顯示,如果鼠標懸停在它

$(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。以及如何使它fadeOut,如果鼠標移出當然...

任何想法?

+4

我有很多想法。你可以設置一個jsfiddle來顯示問題是什麼? –

+0

是#profile_dropdown_content #profile_dropdown的孩子嗎? –

+0

你可以發佈你的HTML代碼嗎? – Zack

回答

2

#profile_dropdown容器內嵌入#profile_dropdown_content並使用懸停事件。

的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; 
}​ 
​ 
+0

謝謝你,這就是我現在基本上......我需要添加的是當你將鼠標移動到它上面時顯示的紅色顯示......並在鼠標離開時隱藏它...... – Michal

+0

哦所以紅色還會在它被盤旋時繼續顯示? – brenjt

+0

@Michal我更新了我的jsfiddle – brenjt

2

包裹在另一個div元素,然後綁定mouseentermouseleave功能的包裝。

模擬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/

相關問題