2011-08-25 145 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>後面,頁面不會閃爍。