【问题标题】:Jquery toggleClass problemjQuery toggleClass 问题
【发布时间】:2011-05-09 19:59:41
【问题描述】:

请帮我处理我的 Jquery toggleClass 菜单。

只有当你在按钮上停留超过 200 毫秒时它才能正常工作,否则它会失败。

这是代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js" type="text/javascript"></script>
<style>
.menu { width: 200px; padding: 5px; margin:10px 0;border:1px solid #FF0000;background: #FFFF00; color: #FF0000;display:block;}
.menu_over { width: 200px; padding: 5px; margin:10px 0; border:1px solid #000000;background: #FF0000; color: #ffffff;display:block;}
</style>
</head>
<body>
<script>
$(function() {
    $("#menu_left a.menu").hover(
        function() {
             $(this).toggleClass( "menu_over", 200 );
        }
    ),
        function() {
             $(this).toggleClass( "menu", 200 );
        }
});
</script>
<div id="menu_left">
    <a href="#" class="menu">AFRICA</a>
    <a href="#" class="menu">AMERICA</a>
    <a href="#" class="menu">ANTARCTICA</a>
    <a href="#" class="menu">ASIA</a>
    <a href="#" class="menu">AUSTRALIA</a>
    <a href="#" class="menu">EUROPE</a>
</div>
</body>
</html>

【问题讨论】:

    标签: jquery mouseover effect toggleclass


    【解决方案1】:

    很好的解决方案达奇。这个问题的一个简单解决方案是停止动画/特效队列。这意味着您可以通过切换类继续制作动画。

    var toggle = function() {
        $(this).stop(true, true).toggleClass( "menu_over", 200);
    };
    
    $("#menu_left a.menu").hover(toggle, toggle);
    

    小提琴: http://jsfiddle.net/NBdR5/10/

    【讨论】:

    • 哇,这真是我一直在寻找的东西,大约 2 天 :) 谢谢,Gary!
    【解决方案2】:

    我不确定为什么淡入淡出会给您带来这些问题,但我发现您的代码存在两个问题。

    1) 主要问题是您的.hover 函数格式错误。

    正确的格式是

    $(item).hover(
       function(){}, //Actions on Mouseover
       function(){} //Actions on Mouseout
    );
    

    2) 您在mouseover 上切换一个课程,并在mouseout 上切换另一个课程。这会导致一些奇怪的结果。

    请参阅我的DEMO Without Fades 以获取更多说明。另外,请注意我简化/简化的 CSS。

    您的代码应该与此类似

    $("#menu_left a.menu").hover(function() {
        $(this).toggleClass( "menu_over");
    },function() {
        $(this).toggleClass( "menu_over");
    });
    

    更新

    如果您想保留淡入淡出,请使用 animate() (DEMO)

    $("#menu_left a.menu").hover(function() {
        $(this).stop().animate({
            'background-color': '#ff0000',
            'color' : '#ffffff',   
            'border-color' : '#000000'       
        }, 200);
    },function() {
        $(this).stop().animate({
            'background-color': '#ffff00',
            'color' : '#ff0000',   
            'border-color' : '#ff0000'       
        }, 200);
    });
    

    【讨论】:

    • 但我唯一需要的就是褪色 :)
    • 好的,然后查看更新。 (jsfiddle.net/Jaybles/NBdR5/7)。正确的方法是通过animate() 函数。
    • 哇,它工作得很好,而且还没有 JqueryUI。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2023-04-01
    • 2014-08-15
    • 1970-01-01
    • 2011-07-09
    • 2012-06-26
    • 1970-01-01
    相关资源
    最近更新 更多