2011-06-28 8 views
1

私はリスト項目の上にマウスを置くと、画像の不透明度が0から1に変化します。 img自体やその親要素の上にマウスを置いたときにCSSでやっても問題ありません。しかし、これは私を困惑させている。ここに私が持っているものがあります(私はjqueryにとって本当に新しいので、間違っているかもしれません)。要素の上に移動し、別のdiv内の別の要素の不透明度に影響を与えます

<style> 
#img-nav img {opacity:0.0;} 
#img-nav:hover img {opacity:1.0;} 
</style> 

<div id=header> 
<ul id="nav"> 
<li id="one"><a href="#">item1</a></li> 
<li id="two"><a href="#">item2</a></li> 
<li id="three"><a href="#">item3</a></li> 
</ul></div> 

<ul id="img-nav"> 
<li><a href="#"><img src="one.jpg" id="img-one"/></a></li> 
<li><a href="#"><img src="two.jpg" id="img-two"/></a></li> 
<li><a href="#"><img src="three.jpg" id="img-three"/></a></li> 
</ul> 

そして、私の疑問のjQuery:

$("#one, #two, #three").hover(function(){ 
$("#img-one, #img-two, #img-three").css({ opacity:1.0 }); 
}); 

私が間違っている一つのことは、私は3李/ IMGの各組み合わせのための3つの異なるホバー宣言を必要とすることであると思います。私が言ったように、私はjqueryにはとても新しいので、答えがシンプルであれば申し訳ありません。私はボードを検索して解決策を見つけることができませんでした。もちろん、私はむしろCSSのソリューションを見つけるだろうが、私はそこにあるとは思わない。

更新/ソリューション:

@Jason。あなたのjqueryはちょうど私が欲しかったことをするために少し変更されました。 CSSで不透明度が0に設定されていて、jqueryを実行する必要はないため、最初の宣言を取り除きました。次に、li上にマウスを置くと、画像の不透明度が.cssに変わります。問題は.cssを使用して不透明度を0に戻していました。スタイルシートのルールに縛られていたインラインスタイルの宣言を保持していました。だから今ホバーが終了したら、私は単にインラインスタイルの属性を.removeAttr( 'style')で取り除くだけです。

ありがとうございました!

$("#one").hover(function() { 
    $('#img-one').css({opacity : 1.0}); 
    }, 
    function() { 
    $('#img-one').removeAttr("style"); 
    } 
); 

$("#two").hover(function() { 
    $('#img-two').css({opacity : 1.0}); 
    }, 
    function() { 
    $('#img-two').removeAttr("style"); 
    } 
); 

$("#three").hover(function() { 
    $('#img-three').css({opacity : 1.0}); 
    }, 
    function() { 
    $('#img-three').removeAttr("style"); 
    } 
); 

答えて

1

は、おそらくこれを行うには、よりエレガントな方法があります...しかし、迅速かつ汚い:

$("#img-one, #img-two, #img-three").css('opacity','0'); 

$("#one").hover(function() { 
    $('#img-one').css({opacity : 1.0}); 
    }, 
    function() { 
    $('#img-one').css({opacity : 0.0}); 
    } 
); 

$("#two").hover(function() { 
    $('#img-two').css({opacity : 1.0}); 
    }, 
    function() { 
    $('#img-two').css({opacity : 0.0}); 
    } 
); 

$("#three").hover(function() { 
    $('#img-three').css({opacity : 1.0}); 
    }, 
    function() { 
    $('#img-three').css({opacity : 0.0}); 
    } 
); 

http://jsfiddle.net/jasongennaro/KdhPG/

+0

エレガントであるかどうかわかりませんが、あなたのコードは理解しやすく操作しやすいです。私はそれが欲しいすべてをやります:http://jsfiddle.net/KdhPG/6/ここではライブですhttp://joshmccall.com/test.html。今度は、リストアイテムの上にマウスを置いたときと、画像そのものの上にマウスを置いたときの両方で、不透明度の変化が得られます。 – Josh

+0

唯一の謎は、このjqueryを追加したときにimg上のCSS:ホバーが機能しなくなった理由です。私のCSSは、imgの上にマウスを置いて不透明度を変更できるようにする必要があります。この効果を追加するまで、元のCSS:ホバー宣言(jqueryで効果を繰り返すように強制する)に悩まされています。大したことではありません。明るいところでは、私のCSSのトランジション(不透明な部分)はまだ動作しているようです。 – Josh

+0

うれしいこと、@ジョシュ –

0

あなたのコードは次のようになります。

$(".one, .two, .three").hover(function(){ 
$(".img-one, .img-two, .img-three").css({ opacity:1.0 }); 
}); 

それは次のようになりますjqueryので

$("div#header li").hover(function() { 
    $("#img-one, #img-two, #img-three").css({ opacity:1.0 }); 
},function() { 
    $("#img-one, #img-two, #img-three").css({ opacity:0.0 }); 
}); 

あなたは.(dot)記号で#記号とクラスで表すことによって、そのIDによって項目を呼び出すことができます


NEW UPDATE:あなたが望むよう

が最終的なデモを参照してください:http://jsfiddle.net/rathoreahsan/7NCQu/20/

+0

申し訳ありません。それは前コーヒーのタイプミスでした。私はクラス/ idsを知っています。しかし、li#以上のホバリングが#img-one、li##img-twoなどにしか影響しないような方法がありますか? – Josh

+0

作業デモを見てください:http://jsfiddle.net/rathoreahsan/7NCQu/11/ –

+0

私はそれをすることさえできなかったので、ありがとう。しかし、それは私がそれがしたいと思っている正確にやっていない。あなたが李の1つの上にマウスを置くと、対応する画像の不透明度のうちの1つだけが実行されます。 – Josh

関連する問題