2012-01-14 12 views
1

"li"内の "p"タグにクラスを追加するためのjQueryコードがあります...しかし、どうすればこれをもっとストレートなスイッチではなくトランジション効果を追加すると面白くすることができますか?jQuery UI: - スイッチクラスですが、ホバー効果を追加しますか?

コード:

$(document).ready(function() { 
    $('li').hover(function() { 
     $('p', this).toggleClass('hovered'); 
    }); 
}); 
+0

あなたは「フェード効果を追加する」と言うときでくださいあなたは要素が「フェードイン」(不可視、ゆっくりと見える)またはクラス遷移がスムーズでなければならないことを意味します(例:初期クラスの値から最終クラスのクラスへのドリフト)。 – mgibsonbr

+0

はい、トランジションは滑らかでなければなりません。レッドからブルーにフェードするのと同じように、最初は黒でなくてもいい...現在、以下の解決策が最初に黒くなっているようです。 – CodeyMonkey

+0

私の答えが更新されました。あなたが今述べたように動作するはずです。ほとんどの人は** fade **という言葉を使うことで混乱しているように見えます。なぜなら、ある時点で要素が消えたり出現したかったからです。私はこの表現を「トランジション効果」の代わりに編集することを提案しました。 – mgibsonbr

答えて

1

animate機能を確認し、次の2つのクラス間の遷移をアニメーション化することができます。

編集:申し訳ありませんが、間違った方法です。あなたが探しているのは、switchClassメソッドです。

ここにswitchClassのdemoがあります。クラスが2つあり、クラスを切り替える場合に便利です。単一のクラスを追加/削除したい場合は、Wouter Jの答えをご覧ください。

更新:これが動作するには2つのクラスが必要です。 switchClassでは、jQuery UIが動作する必要があります。ここでは例です:

HTML:

<li> 
    <p class="regular">Test</p> 
</li> 

CSS:

p.regular { color:red } 
p.hovered { color:blue } 

はJavaScript:

$(document).ready(function() { 
    $('li').hover(function() { 
     $('p', this).switchClass('regular','hovered', 2000); 
    },function() { 
     $('p', this).switchClass('hovered','regular', 2000); 
    }); 
}); 
+0

ほとんど...あなたはそれをオフにホバリングすると "通常"に戻ることはありません...任意のアイデア? – CodeyMonkey

+0

@CodeyMonkey 'hover'は、ホバーが終了したときに実行される追加機能を受け入れます。回答が更新されました。 – mgibsonbr

+0

最後は大丈夫です...フェードはちょっと厄介です。跳ねる...たとえ100または200に設定されていても...どうすればデフォルトの効果を変更できますか? – CodeyMonkey

1
var clone = $("<p>"); 
$('div').hover(
    function() { 
      clone.remove(); 
      clone = $("p", this).clone(); 
      $("p", this).after(clone); 
      clone 
       .hide() 
       .css({ 
        position: "absolute", 
        top: $("p", this).offset().top, 
        left: $("p", this).offset().left, 
        width: $("p", this).width(), 
        height: $("p", this).height(), 
        "z-index": 2 
       }) 
       .addClass("hovered") 
       .fadeIn(); 
    }, 
    function() { 
      clone 
       .fadeOut("normal", function() { 
        $(this).remove(); 
       }); 
    } 
); 
+0

こんにちは、これは黒くなる/ disapearsその後、適切なクラスにフェード、これは、最初にdiapearingビットなしで動作する可能性がありますか? – CodeyMonkey

+0

テキストが消えて黒にジャンプし、滑らかな遷移が必要です。ありがとう – CodeyMonkey

+0

私はそれを変更しました。 – noob

0

あなたはを追加することでeffectさえadd多くをすることができ、これを試してみてくださいfedeInでとfadeOut

$(document).ready(function() { 
    $('li').hover(function() { 
    $('p', this).fadeIn(function(){ 
     $(this).addClass('hovered'); 
    }); 
    },function(){ 
    $('p', this).fadeOut(function(){ 
     $(this).removeClass('hovered'); 
    }); 
    }); 
}); 
1

あなたはjQueryのUIを使用しているので、あなたは、期間がフェードの期間である.toggleClass(class, duration)を、使用することができます。

$(document).ready(function() { 
    $('li').hover(function() { 
    $('p', this).toggleClass('hovered', 1000); // 1000ms = 1s 
    }); 
}); 
+0

うまく動作していないようです... $(document).ready(function(){ $( 'li').hover(function(){ $( 'p'、this).toggleClass 'hovered'、500); }); }); – CodeyMonkey

関連する問題