我相信我遇到了一个奇怪的现象,我想知道是否有人知道为什么会发生这种情况。我一直在使用我创建的自定义 jQuery 幻灯片对摄影网站进行大量图像处理,但遇到了一些问题。
我在这里有一个画廊:http ://www.daemondeveloper.com/photography/gallery.php
我一直在添加一些函数来调整这个画廊中的图像大小,以便它们缩放到预览图像大小的大小。如您所见,最后一张图像是全景的,即使我有 javascript 告诉它调整大小,也不会填满 div 的整个高度。
如果您刷新页面,javascript 似乎会突然工作,并且图片会按应有的方式缩放。
现在尝试单击女孩的全景图片,我的幻灯片将出现,显示使用 jQuery 缩放和垂直居中的图像。下面的函数是处理单击图库中的小图像预览的函数。
如果您查看注释changeSize()
函数的位置,那是我使用该函数的位置并且缩放不起作用。然后我将它移到显示我的幻灯片的 .show() 函数之后,现在它可以工作了。所以看起来 display:none; 影响了 javascript 的触发方式,因为当我调试时,currentImg 对象为空,就好像 .slides 选择器在设置为 display:none; 时不存在一样。这真的发生了,还是我只是看到了其他东西的副作用?
如果这真的发生了,它可能与我所说的第一个问题的原因有关,即在第一次加载gallery.php 页面时全景图像没有缩放。
$('.imgHolder').click(function(){
currentPosition = $('.imgHolder').index(this);
$('#slideShow').width(slideWidth);
// Remove scrollbar in JS
$('#slideContainer').css('overflow', 'hidden');
// Wrap all .slides with #slideInner div
slides.css({
'float' : 'left',
'width' : slideWidth
});
// Set #slideInner width equal to total width of all slides
$('#slideInner').css('width', (slideWidth * numberOfSlides));
// Hide left arrow control on first load
manageControls(currentPosition);
$('#slideInner').css('margin-left' , slideWidth*(-currentPosition));
//changeSize(); used to be here
$('#filter').show();
$('#photoWrap').show();
//Change image scale and center
changeSize();
});
这是进行缩放和居中的 changeSize() 函数
function changeSize(){
currentSlide = $('.slide').get(currentPosition);
currentImg = $(currentSlide).children('img:first')[0];
imgRatio = $(currentImg).height() / $(currentImg).width();
if(imgRatio < slideRatio)
{
$(currentImg).addClass('landscape');
//Vertically align
var thisHeight = $(currentImg).height();
$(currentImg).css('margin-top', ($('#slideShow').height()/2)-(thisHeight/2));
}else{
$(currentImg).addClass('portrait');
}
}