我有一些与一些外部 PHP 一起工作的 jQuery 代码,但通常只有在第二次刷新之后。该代码旨在获取列表中每个图像的尺寸,然后根据其最长边重新设置每个图像的样式以适合其父级。第一次加载此页面时,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/