2011-08-25 88 views
0

我有一个关于Opera中基于jQuery的幻灯片的小问题。Opera 11.5图像闪烁

我在做什么是以下内容。我有一对夫妇的图像:

<div id="bg"> 
<img src="..." /> 
<img src="..." /> 
... 
</div> 

在JS我做了以下内容:

$('#bg img:visible').hide().next().show(); 

正如我等待所有的图像加载构建页面之前,这应该创建一个非从一张照片到下一张照片明显过渡。这在Chrome,Safari,Firefox和IE中运行得非常好。然而,在Opera中,我有一段相当长的时间(可能是1/4秒),在那里我看到(黑色)背景闪烁。 我也试着这样做:

$('#bg img:visible').next().show().prev().hide(); 

,但它并没有区别,所以我想这是Opera的发动机的问题。

然而 - 虽然我知道这是在高级别挑选 - 如果有人遇到过这种情况,我可能会感兴趣,也许知道解决方法或解决方法?

谢谢!

回答

1

Opera在重排/呈现JavaScript中所做的更改时具有不同的处理方式和处理时间 - 基本上,它试图比其他浏览器更快地更新JavaScript更改。请参阅Opera开发人员文章中的Efficient JavaScript。虽然我很惊讶你注意到这种变化。这可能是由于您的开发机器的速度与图像大小,显示驱动程序等相结合的原因。它在其他机器上做了什么?那么其他版本的Opera怎么样?根据你的布局,你可以尝试将第二个图像放在第一个图像下(然后show()第二个图像(尽管它现在仍然被覆盖),然后hide()首先会揭示下面的第二个。

+0

好吧,这听起来像解释了我正在经历的事情,因为我调整了浏览器窗口的大小,并且Opera显然不会“重绘”隐藏的元素,因此我缩放了所有图像(也显示:无;需要重新绘制.show()。我想我会尝试你正在描述的内容,看看它是否有效。非常感谢! – m90

+0

嗯,显然Opera似乎太聪明了,被显示没有任何像素显示的图片所迷惑,因此重绘似乎发生在您实际看到图片时(也尝试过10秒超时)。我想我会让它成为那样....感谢您的输入! – m90

1

这看起来很奇怪,我猜测它与你的实现细节有关。可以创建一个显示问题的jsfiddle?

尽管如此,使用hide()...show()(或其他方式)可能会导致明显的副作用。隐藏某些内容时,整个布局会随着剩余可见元素消耗现有空间而发生变化,然后在显示下一个图像时再次更改。这些事件都是实时发生的,因此您可以在无论用户碰巧使用的任何环境中快速处理事件,从而实现无缝过渡。

真正确定的唯一方法是对所讨论的两幅图像(或通常是区域)使用绝对定位。它们应该在浏览器中占据相同的物理空间。然后做你的表演/隐藏。实际上,哪一个具有更高的Z-索引并不重要,无论新的一个显示给最终用户,还是一旦隐藏另一个。

+0

嗨,感谢您的答案和提示。我知道你提到的定位问题,所以这不应该导致问题。不幸的是,我不能在jsfiddle中重现错误:http://jsfiddle.net/YqN4X/2/这似乎适用于所有浏览器。我在页面中所做的工作,我最初也是将图像缩放为完整的浏览器大小,所以我想这在缩放图像时可能确实是一个性能问题。在这种情况下,我还看到图像是“逐行”生成的(不是真的)。 – m90

1

我已经把所有

<script type="text/javascript" .....></script> 

线后直接在页面<head>解决的歌剧闪烁问题(上加载一个新的HTML页)。

如果只是前置于</head> (或为此事任何HTML线或标签下方),页面闪烁的负荷。

如果所有Javascript被放在<head>后面,页面不会闪烁。