外部PHPと一緒に機能するjQueryコードがありますが、通常は2回目の更新後にのみ機能します。このコードは、リスト内の各画像のサイズを取得するように設計されており、各画像のスタイルを変更して、最も長い辺に応じて親に合わせます。このページを初めてロードしたとき、jQueryはすべての画像の高さと幅を判別できないようであるため、スタイル設定は無視されます。PHPから呼び出された画像が完全にロードされた後にjQueryが実行されるようにするための最良の方法は何ですか?
シナリオ: 外部PHPスクリプトを使用して画像のリストを呼び出すページがあります。PHPが実行されると、結果はID「txtHint」のdiv内にHTMLとしてエコーされます。
したがって、このPHP(関連性のために切り捨てられます)...
echo "<li><img src='images/".$rowcat['imageurl']. "'><div class='title'>" . $counter . ". " . $rowcat['name'] ."</div></li>";
$counter++;
この"txtHint"divにエコーされます:
<div class="featured-scroller">
<ul>
<div id="txtHint">
<li><img src="images/012.jpg"><div class="title">1. Eyemouth Museum </div></li>
<li><img src="images/014.jpg"><div class="title">2. Edinburgh Museum</div></li>
// and so on...
</div>
</ul>
</div>
ただし、結果が返されたら、各画像インスタンスのサイズを確認し、元のアスペクト比を維持しながら、幅と高さのどちらが長いかに従ってスタイルを設定する必要があります。
現在、私は次のjQueryを使用しています。
$("#txtHint img").each(function() {
var imgHeight = $(this).height();
var imgWidth = $(this).width();
if(imgHeight > imgWidth)
{
$(this).css({'height':'100%', 'width':'auto'});
}
else
{
$(this).css({'height':'auto', 'width':'100%', 'position':'relative', 'top':'50%', 'margin-top': -imgHeight / 2 + 'px', 'display':'inline-block'});
}
});
外部PHPスクリプトは、ページヘッド内のJavaScript内から呼び出されることに注意してください。それが違いを生むかどうかはわかりません。
現在のコードは機能しますが、初めてではありません。$(window).loadなどを試し、PHPスクリプトを呼び出す前述のJavaScript内で呼び出しましたが、問題は解決しません。
実用的な例については、次のJSfiddleを参照してください。http: //jsfiddle.net/EMPqW/