だから私は同じ問題について他のたくさんの解決策を読んだが、それらのどれもうまくいかないようだ。
私はたくさんの画像を持っていますが、そのほとんどはページが読み込まれるときに非表示になります。最初の画像のみが表示されます。私がする必要があるのは、画像を垂直方向に中央揃えにするために、負の上部マージンを与えることです。唯一の問題は、私が今持っているコードは非常に一貫性がなく、時々しか機能しないということです。それが私のコードなのか、画像がキャッシュされているのかなど、実際にはわかりません。
これは私が持っているものです:
$('#frontpage-sidebar-slideshow img').each(function(i, v) {
// I read that preloading the images would solve the problem, but this doesn't do anything
//var src = $(this).attr('src');
//$('<img/>')[0].src = src;
// First make parent .slide visible to be able to get the image dimentions (not possible if image is invisible)
var showAfter = false;
if(!$(this).parent('.slide').is(':visible')) {
showAfter = true;
$(this).parent('.slide').css({ // .show() might also work
display: 'block',
visibility: 'visible',
opacity: 1
});
}
// Get dimentions
var wrapHeight = parseInt($('#frontpage-sidebar-slideshow').height(), 10) + 20;
var imgHeight = $(this).height();
var offset = Math.ceil((wrapHeight - imgHeight) / 2);
// Set offset if needed
if(imgHeight > wrapHeight) {
$(this).css('margin-top', offset);
}
// Show image again if needed
if(showAfter) {
$(this).parent('.slide').show();
}
});
SlidesJSを使用して画像のスライドショーを作成しています。HTMLフォーマットは次のようになります。
<div class="slide">
<a href="url goes here">
<img width="200" src="image src goes here" alt="" style="">
<div class="overlay">
<p class="title"> Some title </p>
<p> Some content </p>
<p> More content </p>
</div> <!-- overlay -->
</a>
</div>
<div class="slide" style="display: none;"> <!-- Only the first image is visible, so this one will be hidden -->
<a href="url goes here">
<img width="200" src="image src goes here" alt="" style="">
<div class="overlay">
<p class="title"> Some title </p>
<p> Some content </p>
<p> More content </p>
</div> <!-- overlay -->
</a>
</div>
2つの問題があります:
1)最初の画像は非常に一貫性のない高さの結果になります。ラッパー値(の高さ.slide
)を取得することもあれば、実際の高さの値を取得することもあります。何が原因なのかわかりません。
2)何をしても、最初の画像の高さの値しか取得できません。残りの画像はただ戻り0
ます。.slide
うん、彼らは奇妙なラッパーの高さ(の高さ)さえ返しません。
何か案は?
更新SlidesJSとスクリプトの両方がページロードで実行されることに気づきました。それらが衝突している可能性があります(SlidesJSが最初の画像を除くすべてを非表示にしたいのに対し、画像を表示し、サイズを取得してから非表示にしようとしています) 、それで私は上記のスクリプト全体をaでラップしようとしましたがsetTimeout(code, 300)
、少なくとも最初の画像で一貫した結果が得られるようですが、残りの画像はまだ0を返します。