我打算稱之爲FOUC問題;例如「無風格內容的Flash」。很常見。自從20世紀後期以來,Safari就因此而臭名昭着。
簡短的回答:最初設置visibility:hidden
您的元素與內聯風格。然後使用JavaScript在加載後設置visibility:visible
。
通常,解決方案是隱藏內容直到加載內容,然後在準備就緒時顯示它。通常在內容加載時,您將顯示某種類型的微調器。
從技術上講,有很多方法可以做到這一點。您可以切換CSS display
,visible
和/或opacity
設置。你可以用高z-index
(我稱之爲「面紗」id="veil"
)顯示覆蓋div,然後在加載內容時將其刪除,並使用微調器作爲面紗。您也可以將事物從屏幕上完全移出,直到它們已經加載完畢,然後將它們移動到位。你可以結合這些方法。
就我個人而言,我已經獲得了跨瀏覽器和跨設備與CSS visibility
財產的最佳成功。我喜歡它如何爲佈局中的對象保留空間。其他解決方案有時會在移動設備和一些舊版瀏覽器上出現問題。這裏有幾個片段讓你開始。
首先,使用內聯樣式將可見性設置爲none。
- 免責聲明:我不是內聯風格的粉絲,並且理解分離關注的概念。在這種情況下,我認爲這是必要的,因爲它必須具有最高的級聯優先級,儘可能快地應用,並且我在跨環境中取得了很好的成功。純粹主義者會認爲這應該放在CSS文件中,但我相信我們不應該遵從任何指導方針;有時我們必須有勇氣在強有力的理由下打破常規。讓讀者決定。
<div id="pan-content" class="clearfix" style="visibility:hidden">
然後,在頁面加載(使用jQuery):
$('#window').load(function() {
$('#pan-content').css({visibility:'visible'});
});
這可能被證明是有點慢,因爲你在等待,直到整個窗口加載,直到顯示的旗幟。您也可以將活動附加到特定資源,這會加快速度。看到下面的帖子:
Detect image load
希望這會有所幫助!
更改加載腳本的順序。但是如果它們相互依賴,則可能無法工作。另一個解決方法是隱藏元素(用css),直到你的腳本全部完成了他們的工作,然後使它們再次可見(用Javascript)。缺點是,如果有人沒有啓用Javascript,他們會盯着一個空白頁面。 –
實際上,您可以從html代碼中看到,順序是SmoothDivScroll腳本在TN3圖像庫腳本之前啓動,但即使如此,SmoothDivScroll腳本在TN3圖像庫腳本完成之前仍未完成。我希望有一種方法來定義腳本將以何種順序加載,或者可以定義腳本「B」只在腳本「A」完成時纔開始運行。 – afrikapit