説明
理由:ここで
var $images = $('#illustration-content ul li img');
$images.hover(
function(){
$images.css('opacity', 1).siblings().remove('.title');
var $this = $(this),
a = $this.attr('alt');
$this.css('opacity','.2').parent().append('<span class="title">' + a + '</span>');
},
function(event){
if (!$(event.relatedTarget).hasClass('title')) {
$(this).css('opacity','1').siblings().remove('.title');
}
}
);
はデモです:あなたは
img
要素の
opacity
と
.remove()
INGの余分な
.title
要素をリセットすることでこれを修正することができますtitleは、
img
要素のイベントのみがあるためです。
代わりに、ユーザーが
li
全体にイベントをリンクする必要があります。その結果、ユーザーがリスト項目の上を移動すると、
div.title
を含む要素全体が影響を受けます。上の画像で
、あなたはそれがどのように動作するかを確認することができます。
現在、イベントは緑色に対応するもの、img
です。 これは、div.title
がimg
要素の内部にないため、黄色のdiv.title
が「外部」要素として扱われるため、div.title
にカーソルを合わせるとmouseleave
イベントが発生することを意味します。
イベントをli
、赤にリンクすると、イベントには緑の枠内のすべてのものが表示されます。緑の枠は緑のとです。
li
ブロックをdisplay: inline-block
として扱う必要があります。これにより、画像に対してタイトルを配置できるようになります。
だから、基本的に、私が言うことをしようとしていることは、あなたがそれに応じてコードを調整後
$('#illustration-content ul li');
を行う必要があります代わりに
$('#illustration-content ul li img');
で、です。
ソリューション
Here is a working solution。
var $lis = $('#illustration-content ul li');
$lis.each(function(index, el){
var $this = $(el);
var eImg = $("img", $this);
$this.mouseenter(function(){
var eTitle = $('<div class="title">' + eImg .attr('alt') + '</div>');
eImg.css('opacity','.1');
$this.prepend(eTitle);
}).mouseleave(function(){
var eTitle = $("div.title", $this);
eImg.css('opacity','1');
eTitle.remove('.title');
});
});
代替ソリューション
代わりに作成しておきmouseenter/mouseleave
でのdivを破壊するのではなく、document.ready()
で一度だけのdivのを生成し、表示/ユーザが、上に置いたときにそれらを非表示にする方がよいかもしれませんそれら。
実際には全体のパフォーマンスが向上するはずです。デフォルトでは
Here's an example.
、.title
は、スタイルプロパティdisplay: none
を持っています。良い
var $lis = $('#illustration-content ul li');
$lis.each(function(index, el){
var $this = $(el);
var eImg = $("img", $this);
var eTitle = $('<div class="title">' + eImg.attr('alt') + '</div>');
$this.prepend(eTitle)
.mouseenter(function(){
eImg.css('opacity','.1');
eTitle.show();
})
.mouseleave(function(){
eImg.css('opacity','1');
eTitle.hide();
});
});
注意を知っています。ホバーは、実際には、これらの2つのイベントを組み合わせたものの略記機能です。私は一般的に読みやすく、信頼性が高いので、前者を使う傾向があります。
また、両方のソリューションで、私は関数.each()
を使用しました。 要素を変数に代入することで、JQueryはノードを参照するたびにノードを見つけるために処理を無駄にする必要はありません。より効率的になります。この
$(".title", parent_element).css(...);
ように、セレクタの2番目のパラメータとして素子を通過させることによって
Iは.children()
又は.next()
ような関数を使用する必要はありません。それはまた非常に効率的です。あなたはposition
ING、have a look at thisで苦労した言及
、それは物事を明確にすることがあります。
これらの長いポストは読みにくいですか?まあ、私は必要なものすべてをカバーしていると思います。
幸運&ハッピーコーディング! :)
本当にありがとうございました。コーディングの別の方法は、夢のように機能します。ありがとう! – malicedix
@malicedix問題ありません。あまりにも悪いけど、私はそれについてどんな評判も得ていない。私はあまりにも多くの編集をしたと思う。 :P – ShadowScripter
うん、それは変です。私ができることがあれば教えてください:) – malicedix