2010-06-18 24 views
3

这个脚本在除谷歌浏览器之外的所有浏览器都能很好地工作。jQuery && Google Chrome

$(document).ready(function(){ 
    $(".banners-anim img").each(function(){ 
     var hover_width = $(this).width(); 
     var hover_height = $(this).height(); 
     var unhover_width = (hover_width - 30); 
     $(this).width(unhover_width); 
     var unhover_height = $(this).height(); 
     $(this).closest("li").height(unhover_height); 
     var offset = "-" + ((hover_height - unhover_height)/2) + "px"; 
     $(this).closest("span").css({'position':'absolute', 'left':'0', 'top':'25px', 'width':'100%'}); 
     $(this).hover(function(){ 
      $(this).animate({width: hover_width, marginTop: offset}, "fast") 
     },function(){ 
      $(this).animate({width: unhover_width, marginTop: 0}, "fast") 
     }); 
    }); 
}); 

Chrome无法识别更改的图像属性。

width的img变化时,height也发生变化。即使无法在Chrome ..

$(this).width(unhover_width); 
var unhover_height = $(this).height(); 

unhover_height0。这个脚本的

的完整代码(包括HTML) - http://jsfiddle.net/BsqTe/

请帮助解决这个问题。

谢谢。

+0

后,您可能想看看这个问题,一些功能DoResize叫做:http://stackoverflow.com/questions/3035635/google-chrome-is - 做错了 - 再次 – ig0774 2010-06-18 14:21:51

+0

OT,但所有'$(this)'都让我变成了wince。你调用一个函数来构造一个对象,然后使用它,然后扔掉它;然后调用构造一个对象的函数,然后抛弃它;然后调用一个函数......你明白了。尝试'var $ this = $(this)'在顶部,然后使用'$ this'来代替。 – 2010-06-18 14:25:59

+0

@ T.J。 Crowder - 这是一个好主意,谢谢。 – Happy 2010-06-18 14:30:07

回答

7

如果您正在处理jQuery ready函数中的图像,则需要记住图像可能尚未加载。 jQuery ready函数的目的是在DOM准备就绪后立即触发,即使图像仍在加载。如果你想在所有图像都已完成加载做一些事情,用windowload事件,而不是:

$(window).load(yourFunctionHere); 
+2

我爱你男人! – Happy 2010-06-18 14:29:02

0

您可能要注意到,图像也已为onload功能。此外,一些IE版本有一个特殊的地方,如果图像已经加载,它不会触发事件后附加到事件的任何onload函数。所以这个小片段应始终确保图像已加载

var DoResize = function() { ... } 
var img = $(".find .your img"); 
img.bind('load', DoResize); 
img.bind('error', DoResize); // in case picture fails to load, still resize 
if (img.get(0).complete) { DoResize(); }