+ -
当前位置:首页 → 问答吧 → 关于mouseover和mouseout响应jQuery动画的问题(已解决)

关于mouseover和mouseout响应jQuery动画的问题(已解决)

时间:2010-02-02

来源:互联网

问题描述
导航条中,需要用到mouseover事件,鼠标移动到某个菜单上,动态的展现出子菜单(用的是jQuery中的show函数),鼠标移开后,则动态hide子菜单。问题是当鼠标移动到正在展现过程中的子菜单时候,居然会调用mouseout过程,导致动态展现异常。经试验,如果直接使用css的display属性来控制显示和隐藏,没有该问题。鼠标放到子菜单中,移动过程中不会触发mouseout事件,如果采用js的setInterval的方法实现的动画展现,也不会出现该问题,仅仅在jQuery中出现,有何方法解决。

代码如下
html
复制代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>导航条</title>
  6. <style type="text/css">
  7. @import url(style.css);
  8. </style>
  9. <script type="text/javascript" src="jquery.js"></script>
  10. <script type="text/javascript" src="customer.js"></script>
  11. </head>
  12. <body>
  13. <ul class="menu3">
  14. <li>
  15.   <a href="#" class="menubutton">MENU1</a>
  16.   <div class="submenu">
  17.    <a href="#">submenu1</a>
  18.    <a href="#">submenu2</a>
  19.    <a href="#">submenu3</a>
  20.    <a href="#">submenu4</a>
  21.    <a href="#">submenu5</a>
  22.   </div>
  23. </li>
  24. </ul>
  25. </body>
  26. </html>  

CSS
复制代码
  1. /*===================== 菜单三 =====================*/
  2. .menu3{
  3. width:800px;
  4. }
  5. .menu3 li{
  6. float:left;
  7. width:159px;
  8. height:30px;
  9. position:relative;
  10. text-align:left;
  11. border-right:1px solid #FFFFFF;
  12. }
  13. .menu3 .menubutton{
  14. padding-top:8px;
  15. height:22px;
  16. background-color:#006699;
  17. width:100%;
  18. display:block;
  19. clear:both;
  20. color:#FFFFFF;
  21. text-align:center;
  22. font-weight:600;
  23. }
  24. .menu3 .submenu{
  25. position:absolute;
  26. width:800px;
  27. background-color:#CCCCCC;
  28. padding-top:5px;
  29. display:none;
  30. }
  31. .menu3 .submenu a{
  32. display:block;
  33. width:120px;
  34. float:left;
  35. height:20px;
  36. padding-top:6px;
  37. text-align:center;
  38. background-color:#999999;
  39. color:#FFFFFF;
  40. border-right:1px solid #FFFFFF;
  41. }

jQuery操作文件
复制代码
  1. $(document).ready(function(){
  2.    //菜单三
  3.    $(".menu3 li")
  4.       .mouseover(function(){
  5.           $(this).children(".menubutton").css("background-color","#CCAA11");
  6.           $(".menu3 .submenu").css("display","none");
  7.           $(this).children(".submenu").show(500);
  8.       })
  9.      .mouseout(function(){
  10.           $(this).children(".menubutton").css("background-color","");
  11.      });
  12. });

[ 此帖被神之左手在2010-02-03 11:04重新编辑 ]

作者: 神之左手   发布时间: 2010-02-02

第一次触发完了,去掉over的绑定,等over之后再绑定回来

作者: ywqbestever   发布时间: 2010-02-02

正解!
经测试可以达到目的了。
js部分代码如下
[code]
$(document).ready(function(){
    //菜单三
   $(".menu3 li")
        .mouseover(function(){
            M_over($(this));
        })
        .mouseout(function(){
            $(this).children(".menubutton").css("background-color","");
        });
});


//菜单三 鼠标over效果
function M_over(obj){
    obj.children(".menubutton").css("background-color","#CCAA11");
    $(".menu3 .submenu").css("display","none");
    $(".menu3 li").mouseover(function(){
        M_over($(this));
    });
    obj.children(".submenu").show(500);
    obj.unbind("mouseover");
}
[\code]

在调整过程中,一开始把重新绑定的语句放在mouseout事件里,导致依然会有问题,最终放在了mouseover事件中,完美解决。可见mouseout的逻辑其实不一定要在mouseout事件中产生。

作者: 神之左手   发布时间: 2010-02-03