divラッパーに複数の画像がある場合。ユーザーが画像にカーソルを合わせたときに画像にオーバーレイを追加したい私は以下に示すコードを使用しようとしています。JavaScriptにオーバーレイを追加する画像にカーソルを合わせる
for(var i=0; i<document.getElementsByTagName('img').length; i++) {
document.getElementsByTagName('img')[i].addEventListener('mouseover', function(event){
let elementExists = document.getElementById('wrapper');
let Center = document.createElement('div');
let Text = document.createElement('div');
if (!elementExists) {
let Wrapper = document.createElement('div');
let parentElement = event.currentTarget.parentElement;
Wrapper.classList.add('Wrapper');
Wrapper.id = 'wrapper';
Center.classList.add('Center');
Text.innerHTML = "Sample text";
parentElement.appendChild(Wrapper);
Wrapper.appendChild(Center);
Center.appendChild(Text);
Wrapper.addEventListener('mouseout', function(event){
if (document.getElementById('wrapper')) {
document.getElementById('wrapper').remove();
}
});
}
});
}
.col-md-6 {
width: 375px;
height: 211px;
margin: 20px;
position: relative;
}
.Wrapper {
display: table;
position: absolute;
background-color: rgba(0, 0, 0, 0.5);
height: 100% !important;
width: 100%;
text-align: center;
z-index: 1000;
font-family: arial;
color: #fff;
top: 0;
}
.Center {
display: table-cell;
vertical-align: middle;
}
<div class="col-md-6">
<a href="#">
<img src="https://www.blog.google/static/blog/images/google-200x200.7714256da16f.png" />
</a>
<a href="#">
<img src="https://www.blog.google/static/blog/images/google-200x200.7714256da16f.png" />
</a>
</div>
私は最初の画像の上にカーソルを移動するたびに、コードがうまく動作します。しかし、2番目の画像にマウスを置くと、1番目の画像のみにオーバーレイが追加されます(2番目の画像にオーバーレイが追加されるはずです)。コードをデバッグしようとしました。let parentElement = event.currentTarget.parentElement;
はhrefのみを表示しています。
注:私はWrapperに絶対的な位置を与えているので、私はそのことを知りました。私はJavaScriptファイルを変更したいだけで、最大でCSSを変更したいだけです。 コードでエラーが見つかった場合はお知らせください。
それはCSSであなたの絶対的な位置決めが原因であるように、ラッパーは、あなたがそれを置いた場所を正確にとどまる見えます。 Btw、あなたの現在のforループを素早く最適化するには、ループの外側で 'document.getElementsByTagName'を抽出し、それをローカル変数として保持します。ループの繰り返しごとにクエリを呼び出す必要はありません。 – Icepickle
@Icepickleこれは単なるサンプルコードです。私は実際のコードではイメージをはるかに異なる方法で反復しています。感謝! 問題を修正するためにCSSを変更する方法を教えてください。 –
シンプルなCSSでもできます https://codepen.io/ArnaudBalland/pen/vGZKLr –