2011-06-28 84 views
1

我試圖創建一種效果,當您將鼠標懸停在列表項上時,它將圖像(在完全不同的div)中的不透明度從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 }); 
}); 

我想一件事是錯的,我需要每個三華里/ IMG組合的三個不同的懸停聲明。就像我說的,我對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時,CSS懸停在img停止工作。我的css應該允許我將鼠標懸停在img上,並在不透明度中進行更改,直到我添加了這種效果,這種效果與原始css:hover聲明(迫使我在jquery中重複該效果)有關。沒什麼大不了的。在光明的一面,我的css過渡(在不透明度上)似乎還在工作。 – Josh

+0

很高興,@Josh –

0

代碼如下:

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

它應該是:

$("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 }); 
}); 

在jQuery中,你可以通過#標誌和階級表示與.(dot)標誌

通過其ID叫項

新的更新:

看到最後的演示,只要你想:http://jsfiddle.net/rathoreahsan/7NCQu/20/

+0

對不起。那是一個咖啡前錯字。我知道類/ ids。但有沒有辦法讓徘徊在li #one上只會影響#img-one,li#只會影響#img-two等等。 – Josh

+0

查看工作演示:http://jsfiddle.net/rathoreahsan/7NCQu/11/ –

+0

所以我甚至無法做到這一點,所以謝謝。但它仍然沒有做到我想要的。如果你將鼠標懸停在其中一個li上,只有一個相應圖像的不透明度受到影響。 – Josh

相關問題