我从之前的StackOverflow问题Jquery onmouseover image size increase
中得到了这个例子以下是鼠标悬停示例的链接:http://jsfiddle.net/simevidas/fwUMx/5/
以上示例适用于Chrome,但不适用于Firefox或IE。
可能是什么原因?
答案 0 :(得分:4)
查看我对此主题的回复:jQuery - Complete loading animation on each individual image?
正如jQuery文档页面中提到的load事件,它存在一些问题。在IE上,它并不总是第一次触发,而在webkit浏览器上,如果从缓存中读取它并不总是触发它。
您正在使用load()
事件将图片原始高度保存到数据属性,但由于上述情况并未始终设置,因此调整大小不起作用。
解决方案是将以下一小段代码放入您的ready函数中,该函数清除并重置所有图像上的src
属性(如果您愿意,可将其更改为某些图像)以强制触发加载事件。
$('img').each(function(){
var src = $(this).attr('src');
$(this).attr('src','#');
$(this).attr('src',src);
});
以下是您的固定jsfiddle演示:http://jsfiddle.net/fwUMx/86/
如果想要自动循环显示图像具有相同的效果,您只需要编写一些额外的函数并在动画完整回调中调用它们。这是一个有效的演示:http://jsfiddle.net/fwUMx/99/
var images = null;
var animation_speed = 500;
var wait = 1500;
function ZoomIn(element){
element.animate({
height: element.data('height') * 1.5
}, animation_speed, function(){
// Zoom in animation ended, schedule next image
setTimeout(function(){
ZoomOut(element);
}, wait);
setTimeout(function(){
var next = element.next();
// Comment out the next line if you don't want the animation to restart after last image.
if(element.index() == images.length - 1) next = images.eq(0);
ZoomIn(next);
}, wait);
});
}
function ZoomOut(element){
element.animate({
height: element.data('height') * 1
}, animation_speed);
}
function StartAnimation(){
// Make sure images object is set
if(!images) return;
ZoomIn(images.eq(0));
}
$(function(){
images = $('img');
var cnt = images.length;
var loaded = 0;
images.load(function() {
$(this).data('height', this.height);
loaded++;
// Start the animation after all images have loaded
if(loaded == cnt) StartAnimation();
});
// Force image load events
images.each(function(){
var src = $(this).attr('src');
$(this).attr('src','#');
$(this).attr('src',src);
});
});