2016-05-26 8 views
0

私は自分のサイトに必要なjQueryの魔法に執着しています...私が持っているすべての画像の上にコードでDIVを追加しようとしていますDIVは画像と同じサイズです - 画像は反応しませんので、画像のサイズが変わるとDIVも同じようになります...下の画像と同じサイズですべての画像の上にDIVを追加してください

私は以下のアプローチで行っていましたが、すべてのDIVを最後の画像ではなく、各画像の上に座っている画像...私は今のところ以下のように持って

コード:

function placeImageOverDIVFX() { 
    $('.projectContentWrapper img').before('<div class="projectContentWrapperOverlayDIV"></div>'); 
} 

placeImageOverDIVFX(); 
$(window).load(function() { placeImageOverDIVFX(); }); 

function sizeupImageInnerFX() { 
    $('.projectContentWrapper img').each(function() { 
     var contentWrapperImageWidth = $(this).width(); 
     var contentWrapperImageHeight = $(this).height(); 

     function setSizes() { 
      $('.projectContentWrapperOverlayDIV').each(function() { 
       $(this).width(contentWrapperImageWidth); 
       $(this).height(contentWrapperImageHeight); 
      }); 
     } 

     setSizes(); 
    }); 
} 

sizeupImageInnerFX(); 

$(window).load(function() { sizeupImageInnerFX(); }); 
$(window).resize(function() { sizeupImageInnerFX(); }); 

各 "projectContentWrapperOverlayDIV" DIVの直下にある画像に固有のDIVサイズを作成する方法に関するアイデアはありますか?以下

HTMLのマークアップ例:

<div class="projectContentWrapper"> 

<img src="assets/images/work/01/01.jpg"> 
<img src="assets/images/work/01/02.jpg"> 
<img src="assets/images/work/01/03.jpg"> 

</div> 

答えて

0

私はあなただけのロジックに問題があると思います。 この.each()ブロックはすべての画像の幅/高さをつかむことができます。私はこのコードがうまくいくと思います。

$('.projectContentWrapper img').each(function() { 
    var contentWrapperImageWidth = $(this).width(); 
    var contentWrapperImageHeight = $(this).height(); 
    setSizes(); 
}); 

ただし、divのサイズを変更する場合は、実際には画像の上にあるdivだけでなく、すべてのdivを繰り返し処理しています。

function setSizes() { 
    $('.projectContentWrapperOverlayDIV').each(function() { 
     $(this).width(contentWrapperImageWidth); 
     $(this).height(contentWrapperImageHeight); 
    }); 
} 

画像ループを介して初めて、.projectContentWrapperDIVクラスを持つすべてのdivは、最初の画像の幅/高さに更新されます。 2回目以降は、最初のループの変更を上書きし、すべてのdivを2番目の画像の幅/高さに更新します。これは最後の画像まですべて繰り返されます。そのため、すべてのdivが最後の画像の幅/高さを継承しているように見えます。

画像の上の個々のdivに具体的にアクセスする必要があります。あなたはHTMLマークアップを持っていないので、具体的な内容を教えることはできませんが、jQueryのparent()closest()はおそらくそれを見つけるのに役立ちます。 HTMLマークアップを投稿すると、それを修正する方法がわかります。

+0

HTMLマークアップが役立ちましたか? – dubbs

0

あなたはそれを不必要に補完しています。私があなたをよく理解していれば(画像にdivを追加する)、CSSで簡単に行うことができます。私の例を見て、必要に応じて調整してください。

.imager { 
 
    width: 150px; /* Adjust as Needed */ 
 
    height: 150px; /* Adjust as Needed */ 
 
    display: inline-block; 
 
    position: relative; /* Helps curatil overlap */ 
 
    overflow: hidden; 
 
} 
 

 

 
.imager:before { 
 
    content: "IMG"; 
 
    width: 100%; 
 
    height: 100%; 
 
    position: absolute; 
 
    background: black; 
 
    z-index: 9; 
 
    top: 0; 
 
    left: 0; 
 
    opacity: .4; 
 
} 
 

 

 
/* For the text "IMG" */ 
 

 
.imager:after { 
 
    content: "IMG"; 
 
    height: 100%; 
 
    width: 100%; 
 
    line-height: 150px; 
 
    text-align: center; 
 
    top: 0; 
 
    position: absolute; 
 
    font-weight: bold; 
 
    font-size: 36px; 
 
    color: red; 
 
    
 
    } 
 

 
/* IMG Block ends here */ 
 

 

 

 

 
/* Image control starts below */ 
 

 
.imager img { 
 
    width: 100%; 
 
    heihgt: auto; 
 
    margin: 20px 10px 0 10px; 
 
}
<div class="imager"><img src="http://i41.tinypic.com/14iiyoy.jpg" border="0" alt="Image and video hosting by TinyPic"> </div> 
 

 
<div class="imager"><img src="http://i41.tinypic.com/14iiyoy.jpg" border="0" alt="Image and video hosting by TinyPic"> </div> 
 

 
<div class="imager"><img src="http://i41.tinypic.com/14iiyoy.jpg" border="0" alt="Image and video hosting by TinyPic"> </div> 
 

 
<div class="imager"><img src="http://i41.tinypic.com/14iiyoy.jpg" border="0" alt="Image and video hosting by TinyPic"> </div>

0

私が正しく質問を理解していればここでは、アイデアです。流体イメージのサイズ変更時にDIVのサイズを変更するために、各divにイメージのインデックスに基づいてIDを与えます。

$(window).load((function() { 
    $('.projectContentWrapper img').each(function (index) { 
     var imageWidth = $(this).width(); 
     var imageHeight = $(this).height(); 
     var newDiv = $("<div class='projectContentWrapperOverlayDIV'></div>"); 
     $(newDiv).width(imageWidth); 
     $(newDiv).height(imageHeight); 
     $(newDiv).attr("id", "overlay_"+index); 
     $(this).before(newDiv); 
    } 
} 

$(window).resize(function() { 
    $('.projectContentWrapper img').each(function (index) { 
     var imageWidth = $(this).width(); 
     var imageHeight = $(this).height(); 
     $("#overlay_"+index).width(imageWidth).height(imageHeight); 
    } 
} 

イメージにIDがある場合は、それがさらに優れています。ただ使用してください:

$(newDiv).attr("id", "overlay_" + this.id); 

//もちろんテストされていません。

関連する問題