したがって、不透明度を0に変更することで、ホバーするともう一方がグレースケールに変わる2つのカラー画像があります(各画像の白黒コピーがすぐ後ろにあります)。これは正常に機能します。
ホバーした画像の上にキャプションを表示しようとしています(ホバーしたとき)。画像にカーソルを合わせると、キャプションが正常に表示されます。ただし、マウスをキャプションの上に移動すると、画像自体にカーソルを合わせる必要がなくなるため、キャプションが常に消えて再表示されます。キャプションが消えたら、画像にもう一度カーソルを合わせると、再び表示されます。
私がしたいのは、このキャプションにカーソルを合わせると、まだ画像にカーソルを合わせているかのように動作することです。代わりに、画像の上にキャプションを永続的に表示することも受け入れます(正直に言うと、長期的にはさらに良いかもしれません)。
event.stopPropagation()メソッドを調べましたが、これにより、効果がDOMまたはその効果への何かを上に移動するのを防ぐようであり、このキャプションは兄弟です。
コードは次のとおりです
HTML
<div id="leftbox">
<div id="upper" class="cap">
<div class="gallery">
<ul>
<li>
<a href="link.html">
<img src="images/img1_color.jpg" class="color" alt="a" id="img1>
</a>
</li>
<li>
<a href="link.html">
<img src="images/img1_dark.jpg" class="dark" alt="a">
</a>
</li>
</ul>
</div>
<div id="caption1">
</div>
</div>
<div id="lower" class="cap">
<div class="gallery">
<ul>
<li>
<a href="link2.html">
<img src="images/img2_color.jpg" class="color" alt="b" id="img2>
</a>
</li>
<li>
<a href="link2.html">
<img src="images/img2_dark.jpg" class="dark" alt="b">
</a>
</li>
</ul>
</div>
<div id="caption2">
</div>
</div>
</div>
CSS
.gallery li {
list-style-type: none;
position: relative;
}
img.dark {
position: absolute;
left: 0;
top: 0;
}
img.color {
position: absolute;
left: 0;
top: 0;
z-index: 1;
}
#leftbox {
float: left;
width: 450px;
margin: 5px 10px 0px 0px;
}
#leftbox #upper {
width: 450px;
height: 250px;
margin: 0px 0px 10px 0px;
}
#leftbox #lower {
width: 450px;
height: 250px;
margin: 0px 0px 5px 0px;
}
.gallery #capimg1{
height: 20px;
text-align: center;
color: #ffffff;
background-color: green;
z-index:2;
display: none;
position: absolute;
padding: 5px 100px 5px 100px;
}
.gallery #capimg2{
height: 20px;
text-align: center;
color: #ffffff;
background-color: green;
z-index:2;
display: none;
position: absolute;
padding: 5px 100px 5px 100px;
}
Javascript
window["img1"] = "#img1";
window["img2"] = "#img2";
$(document).ready(function(){
$('img.color').hover(function(ev) {
if (this.id == "img1") {
$(img2).stop().animate({"opacity": "0"}, 600);
}
else if (this.id == "img2") {
$(img1).stop().animate({"opacity": "0"}, 600);
}
$('#cap'+this.id).stop().fadeIn(400).html(this.alt);
},
function reAnim() {
$([img1, img2].join(",")).stop().animate({"opacity": "1"}, "slow");
$('#cap'+this.id).css("display", "none"); }
);
});
副次的な質問:#capimg1と#capimg2のdivをギャラリーのdivと同じ幅にする方法はありますか?そうでない場合は、画像ごとにdivを作成し、幅をハードコードします。
手伝ってくれてありがとう