優化Javaapplets加載過程
大家知道,在java applet還沒有全部加載的時候,IE或Netscape會在applet對應的區域顯示一塊灰色的區域。那,您有沒有想過用其他的方式代替它呢?
本文介紹了如何利用JavaScript 實現在加載java applet時候顯示一段消息,比如請稍候之類的話。該段代碼可以在IE和Netscape運行。
下面的代碼就可以解決這個問題。
<html> <head> <title>Your Title Here</title> </head> <script language="JavaScript"> <!-- Hide script from old browsers function init() { // Microsoft Internet Explorer if (document.all) { document.all.loading.style.visibility="hidden"; document.all.myapplet.style.visibility="visible"; document.applets[0].repaint(); } // Netscape Navigator else { document.loading.visibility="hide"; document.myapplet.visibility="visible"; } } // --> </script> <style type="text/css"> #loading { position:absolute; left:150; top:200; } #myapplet { position:absolute; left:10; top:10; visibility:hide; } </style> <body onLoad="init()"> <div id="loading"> <p>Please wait while Java applet loads...</p> </div> <div id="myapplet" style="visibility:hidden"> <applet archive="app1.jar" code="app1.class" align="baseline" width="620" height="442"> <p>Requires a browser that supports Java.</p> </applet> </div> </body> </html> |
解釋:
首先,讓我們來看看我們真正想做的是什么. 其實我們只不過希望把下載java程序過程中的不雅觀的灰塊去掉,以一些消息如正在載入,請稍候之類的畫面蓋住原來的灰色區域。而一旦java加載完畢,馬上把該區域恢復為applet可見。
上面的javascript代碼就是實現了這個目的的一個實例。
下面,讓我來逐條解釋一下我們是如何實現的。
首先請看以下部分。
<div id="loading"> <p>Please wait while Java applet loads...</p> </div> <div id="myapplet" style="visibility:hidden"> <applet archive="app1.jar" code="app1.class" align="baseline" width="620" height="442"> <p>Requires a browser that supports Java.</p> </applet> </div> |
正如您所見到的,我用了2個層,第一個層(id為loading)可以寫上一些提示消息。而第2個層(id為myapplet)在一開始是不可見的。當applet下載好了,馬上把第2個層顯示出來,并把第一個層設為不可見。因此,只要這2個層大小,位置必須完全一致。就可以實現我們的目標。下面是對不同的層的屬性描述代碼。
<style type="text/css"> #loading { position:absolute; left:150; top:200; } #myapplet { position:absolute; left:10; top:10; visibility:hide; } </style> |
好,現在我們只差最后一個問題需要解決:如何知道applet已經完全下載了呢?在IE和netscape中都有提供document.all這個屬性,當應頁面的全部內容(包括applets,圖片,聲音等)已經下載后該屬性為真。好,這樣,我們只需監測document.all是否為真,如果是,那就可以把消息所在的層設為不可見,而applet所在的層設為可見,并刷新applet的顯示(因為先前applet的顯示被隱藏了),否則則相反處理。
這是處理后的代碼:
<script language="JavaScript"> function init() { if (document.all) { document.all.loading.style.visibility="hidden"; document.all.myapplet.style.visibility="visible"; document.applets[0].repaint(); } else { document.loading.visibility="hide"; document.myapplet.visibility="visible"; } } </script> |
大功告成。其實,用這個辦法同樣適用于用含有圖片蓋住applet直到applet開始運行為止。如何處理,我想聰明的你一定已經知道答案了。