1

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>
4

2 に答える 2

1

フェードがこれらの問題を引き起こしている理由は正確にはわかりませんが、コードに2つの問題があります。

1)主な問題は、.hover関数の形式が正しくないことです。

正しい形式は

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

2)で1つのクラスmouseoverを切り替え、で別のクラスを切り替えmouseoutます。これはいくつかの奇妙な結果を引き起こすでしょう。

詳細については、フェードなしのデモを参照してください。また、私の縮小/簡略化された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);
});
于 2011-05-09T11:15:11.283 に答える
1

ナイス ソリューション ダッチー。この問題の簡単な解決策は、アニメーション/FX キューを停止することです。これは、クラスを切り替えてアニメーションを続行できることを意味します。

var toggle = function() {
    $(this).stop(true, true).toggleClass( "menu_over", 200);
};

$("#menu_left a.menu").hover(toggle, toggle);

フィドル: http://jsfiddle.net/NBdR5/10/

于 2011-05-09T11:50:56.097 に答える