我有一個網頁每隔幾秒自動重新加載一次,並顯示一個不同的隨機圖像。然而,當它重新加載時,第二秒會出現空白頁面,然後圖像緩慢加載。我希望繼續顯示原始頁面,直到下一頁加載到瀏覽器的內存中,然後一次顯示它,以便它看起來像無縫幻燈片。有沒有辦法做到這一點?是否可以在呈現之前加載整個網頁?
回答
回到黑暗的舊時代(2002年),我通過一個隱形的iframe來處理這種情況。我會將內容加載到body.onload()方法中,然後將內容放到需要的地方。
Pre-AJAX這是一個很好的解決方案。
我只是提到了完整性。我不推薦它,但值得注意的是,Ajax不是先決條件。
這就是說,在你只需循環圖像的情況下,使用Ajax或類似jQuery循環插件的動態循環瀏覽圖像,而無需重新加載整個頁面。
是改變圖像的唯一的東西?如果是這樣的話,使用類似jQuery的循環插件而不是重新加載整個頁面可能更有效。
http://malsup.com/jquery/cycle/
這裏是JS需要,如果你使用jQuery的 -
說,這是你的HTML:
<div class="pics">
<img src="images/beach1.jpg" width="200" height="200" />
<img src="images/beach2.jpg" width="200" height="200" />
<img src="images/beach3.jpg" width="200" height="200" />
</div>
這裏將是需要jQuery的:
$(function(){
$('div.pics').cycle();
});
無需擔心不同的瀏覽器 - 完成跨瀏覽器兼容吳春明。
如果您創建了兩個在圖像區域重疊的div,您可以通過AJAX加載一個帶有新圖像的div,隱藏當前div並顯示新圖像,並且不會刷新網頁導致「不良轉型」。然後重複這個過程。
如果只有少量的圖像,並且它們總是以相同的順序顯示,那麼您可以簡單地創建一個動畫GIF。
如果圖像是高質量的照片...動畫GIF可能有點臃腫。如果是這種情況,請嘗試Max Frasers的建議。 – alex 2009-02-23 01:32:24
如果你只是改變圖像,那麼我建議不要重新加載頁面,並使用一些JavaScript來改變圖像。這可能是jquery循環插件爲你做的。
無論如何,這裏有一個簡單的例子
<img id="myImage" src="http://someserver/1.jpg" />
<script language="javascript">
var imageList = ["2.jpg", "3.jpg", "4.jpg"];
var listIndex = 0;
function changeImage(){
document.getElementById('myImage').src = imageList[listIndex++];
if(listIndex > imageList.length)
listIndex = 0; // cycle around again.
setTimeout(changeImage, 5000);
};
setTimeout(changeImage, 5000);
</script>
這會改變每5秒的圖像源。不幸的是,瀏覽器會逐步下載圖像,因此在下載新圖像時,您會收到幾秒鐘的「閃爍」(或者可能是空白區域)。
爲了解決這個問題,您可以「預加載」圖像。這是通過創建一個不顯示在屏幕上的新臨時圖像來完成的。一旦圖像加載完畢,您將真實圖像設置爲與「預加載」相同的來源,因此瀏覽器會將圖像從其緩存中取出,並立即顯示。你會做這樣的:
<img id="myImage" src="http://someserver/1.jpg" />
<script language="javascript">
var imageList = ["2.jpg", "3.jpg", "4.jpg"];
var listIndex = 0;
var preloadImage = new Image();
// when the fake image finishes loading, change the real image
function changeImage(){
document.getElementById('myImage').src = preloadImage.src;
setTimeout(preChangeImage, 5000);
};
preloadImage.onload = changeImage;
function preChangeImage(){
// tell our fake image to change it's source
preloadImage.src = imageList[listIndex++];
if(listIndex > imageList.length)
listIndex = 0; // cycle around again.
};
setTimeout(preChangeImage, 5000);
</script>
這是相當複雜的,但我會離開它作爲一個練習,讀者把所有的拼在一起(希望說:「啊哈!」):-)
- 1. 使PhantomJS等待整個頁面加載之前呈現爲PDF
- 2. 我可以在整個頁面加載之前運行JavaScript嗎?
- 3. 是否可以在頁面開始加載之前顯示加載gif /圖像
- 4. 在顯示HTML頁面之前是否可以預加載HTML頁面?
- 5. ExtJS在Store加載之前呈現網格
- 6. 如何在頁面呈現之前加載視圖狀態
- 7. '在整個網站加載之前加載'div
- 8. 如何在整個頁面加載之前加載bootstrap-select.js?
- 9. 在整個頁面加載之前顯示加載欄
- 10. 我可以在頁面加載之前加載lightbox嗎
- 11. 是否可以在preloader啓動之前加載非文檔類?
- 12. 在DOM加載之前Ajax調用是否可以完成?
- 13. Android Webview在加載另一個網頁之前完成加載
- 14. 是否有任何插件可以使JavaScript在頁面加載之前執行?
- 15. 是否可以在重新加載頁面之前停止所有jQuery函數?
- 16. 等待Firebase數據加載之前呈現NodeJS頁面forEach之前與Promise.all()
- 17. wp7 - 是否可以在頁面之間加載用戶控件?
- 18. 是否可以在本地將圖像加載到網頁中?
- 19. 是否可以在fckeditor中加載網頁?
- 20. 在將它加載到UIWebView之前,是否可以檢查直播網址是否可播放?
- 21. 加載整個網頁
- 22. 是否可以在ActiveAdmin頁面中呈現下標和上標?
- 23. 我的活動加載之前是否可以顯示動畫?
- 24. php在使用SimpleHTMLDOM呈現之前呈現頁面的內容
- 25. 是否可以在「App」組件之前加載某個組件? Angular2
- 26. 是否可以居中已經加了前綴的網頁?
- 27. 在收到所有數據之前呈現網頁
- 28. Java:在網頁瀏覽器加載之前編輯網頁
- 29. 顯示之前的網頁加載
- 30. 是否可以通過AJAX加載跨域網頁?
圖像是從外部來源定期生成的,所以我沒有在代碼時間的文件名。 – brian 2009-02-23 05:38:43
您是否可以讓它們在生成時命名爲相同的東西? IE瀏覽器:圖片將永遠被稱爲homepagetemp.jpg 原因然後你可以使用jQuery的ajax加載函數來獲取你的新形象每隔幾秒或任何你需要的時間間隔。 – Slee 2009-02-23 21:45:53