作为艺术家的 Wordpress 网站的一部分,我制作了一个简单的 jQuery 图像交换循环,用于每个单独的自定义帖子。本质上,只是一张带有照片信用的大图像,下面是一组七个缩略图,以显示艺术作品的不同视图。单击每个缩略图会将当前大图像换成缩略图中的 href 以及换出照片信用。照片信用在每个缩略图中使用了一个隐藏的 div,其中包含 .hideText 类,其中包含由 PHP 提供的相关摄影师的姓名。
在 Firefox、Chrome、Opera 和 IE > 8 中一切正常。在 IE8 中,在第一次加载时,可以按顺序单击每个图像以生成相应的大图像,但在单击第七个缩略图或单击直接数字序列后会导致尽管href仍然正确,但未显示大图。注意:使用 jQuery 1.8.2 和 Modernizr 2.6.2。
除了 IE8 错误之外,我认为还有其他三个问题值得一提。1) 使用 .load() 会产生缓慢的加载时间,直到图像被缓存。我想我应该使用预加载器,但不确定如何使用此设置。2)而且由于大图像加载缓慢,绝对定位的照片信用有时会首先显示在错误的位置,直到img加载。理想情况下,jQuery 照片信用块将被链接到跟随图像加载代码以避免这种情况;我尝试使用匿名函数来做到这一点,但无法让它工作,所以 .delay() 是一个不可靠且不可靠的替代方案。3)点击时,应该在旧图像隐藏之前添加#artWrap背景微调器,并在新图像淡入后移除,但它不能始终如一地工作。
考虑到意外的时间投入,回想起来我可能会使用 WP 图片库插件,但我想了解这些东西。欢迎任何建议!
相关的jQuery:
$('.thumbnail').live("click", function() {
$('#artWrap').css('background-image', "url('../img/ajax-loader-48-48.gif')");
$('#artLarge').hide();
var i = $('<img />').attr('src',this.href).load(function() {
$('#artLarge').attr('src', i.attr('src'));
$('#artLarge').fadeIn(200);
$('#artWrap').css('background-image', 'none');
});
if ( $(this).find('.hideText').is(':empty') ) {
$('#photoCredit').hide().empty();
} else {
$('#photoCredit').hide().empty();
var newCredit = $(this).find('.hideCredit').html();
$('#photoCredit').html(newCredit).delay(600).fadeIn(200);
}
return false;
});
...
基本 div 结构:
<div id="artShow">
<div id="artWrap" >
<div id="artImage">
<img id="artLarge" src="../uploads/EXAMPLE_1-LG.jpg">
</div><!-- #artImage -->
<div id="photoCredit">
Photo: Example 1 Photographer
</div><!-- .artCredit -->
</div><!-- #artWrap -->
<div id="artThumbs" class="clearfix">
<div id="thumb1" class="thumb">
<a href="../uploads/EXAMPLE_1-LG.jpg" class="thumbnail nofancybox"><!-- large image link goes in href here -->
<img src="../uploads/EXAMPLE_1-SM.jpg" width="72" height="72" ><!-- small image -->
</a>
<div class="hideCredit">Photo: Example 1 Photographer</div>
</div><!-- #thumb1 -->
<div id="thumb2" class="thumb">
<a href="../uploads/EXAMPLE_2-LG.jpg" class="thumbnail nofancybox">
<img src="../uploads/EXAMPLE_2-SM.jpg" width="72" height="72" >
</a>
<div class="hideCredit">Photo: Example 2 Photographer</div>
</div><!-- #thumb2 -->
<div id="thumb3" class="thumb"> ... ETC ... </div>
<div id="thumb4" class="thumb"> ... ETC ... </div>
<div id="thumb5" class="thumb"> ... ETC ... </div>
<div id="thumb6" class="thumb"> ... ETC ... </div>
<div id="thumb7" class="thumb"> ... ETC ... </div>
</div><!-- #artThumbs -->
</div><!-- #artShow -->
...
相关的CSS:
/* Content shell for whole image swap show */
#artShow { float: right; position: relative; width: 630px; min-height: 570px; }
/* wrap for both image and photo credit */
#artWrap { float: left; position: relative; background: url('../img/ajax-loader-48-48.gif') center center no-repeat; }
/* wrapper for large image */
#artImage { min-height: 456px; margin-bottom: 19px; line-height: 0; /* lh adjusts photo credit */ }
/* ID attached to large img */
#artLarge { }
/* photo credit below artImage */
#photoCredit {
position: absolute;
right: 0;
bottom: -5px;
height: 16px;
padding-top: 3px;
width: 100%;
text-align: right;
}
#artThumbs { position: absolute; top: 492px; left: 0; width: 651px; height: 72px; }
.thumb { float: left; margin-right: 21px; width: 72px; height: 72px; background-color: #c9c9c9; }
.thumbnail { display: block; width: 72px; height: 72px; }