私はjavascriptを使用して、サイトの唯一のコンテンツとして全画面表示されていない.png画像を定期的に置き換えています。どのように試しても、Firefoxでは(firebugで見られるように)ロードされた後、新しい画像は常に上から下に描画されます。これには数秒かかります。これを防ぎ、一度に写真を表示する方法はありますか?
これは私の現在のjavascriptコードです:
function preloadScreenshotPeriodically(){
var new_screenshot = new Image();
new_screenshot.src = "screenshot.png?defeat_firefox_caching=" + counter;
new_screenshot.id = "screenshot";
counter = counter + 1;
new_screenshot.onload = function(){
loadScreenshot(new_screenshot);
setTimeout("preloadScreenshotPeriodically();", 5000);
};
}
function loadScreenshot(new_screenshot){
document.getElementById("screenshot").parentNode.replaceChild(new_screenshot, document.screenshot);
}
また、2つの画像を使用してみましたが、そのうちの1つは非表示になっています。次に、非表示の画像に画像をロードして交換します。同じ結果:/
他のバージョンでは、Ajaxで画像をフェッチし、読み込みが完了した後、img-tagのURLを変更しました。私の望みは、ブラウザが画像がすでにロードされていることを認識し、ロードするのではなく、ブラウザキャッシュからフェッチすることでした。しかし、これは起こらなかったので、サーバーに対して1つの画像を2回要求し、他の試行と同じようにゆっくりと描画することになりました。
編集: 今私は答え1で提案されたようにそれを試しました:次の画像をロードするときに画像を切り替えても問題なく動作しますが(これは必要ありません)、ロードされたらすぐに切り替えようとします(私はwant)は、上記のように空白のウィンドウ(非常に短い)と画像の表示されたロードをもたらします。
これは機能します:
<body>
<style type="text/css">
#loaderWin { display:block; height:1px; width:1px; overflow:hidden; }
</style>
<div id="imagewin"></div>
<div id="loaderWin"></div>
<script type="text/javascript">
var screenshotCount=0;
function showFirstImage() {
loadNextImage();
}
function showNewImage() {
loadNextImage();
}
function nextImageLoaded() {
// swapImage();
}
function loadNextImage() {
swapImage();
screenshotCount = screenshotCount +1;
var nextImage = "<img id='loaderWinImg' src='screenshot.png?x="+screenshotCount+"' onload='nextImageLoaded()' />";
document.getElementById('loaderWin').innerHTML = nextImage;
}
function swapImage() {
document.getElementById("loaderWinImg").onload = '';
var newimage=document.getElementById('loaderWin').innerHTML;
document.getElementById('imagewin').innerHTML = newimage;
}
var showImages = setInterval("showNewImage()",15000);
showFirstImage();
</script>
</div>
</body>
</html>
これは機能しません:
<body>
<style type="text/css">
#loaderWin { display:block; height:1px; width:1px; overflow:hidden; }
</style>
<div id="imagewin"></div>
<div id="loaderWin"></div>
<script type="text/javascript">
var screenshotCount=0;
function showFirstImage() {
loadNextImage();
}
function showNewImage() {
loadNextImage();
}
function nextImageLoaded() {
swapImage();
}
function loadNextImage() {
screenshotCount = screenshotCount +1;
var nextImage = "<img id='loaderWinImg' src='screenshot.png?x="+screenshotCount+"' onload='nextImageLoaded()' />";
document.getElementById('loaderWin').innerHTML = nextImage;
}
function swapImage() {
// loadNextImage();
document.getElementById("loaderWinImg").onload = '';
var newimage=document.getElementById('loaderWin').innerHTML;
document.getElementById('imagewin').innerHTML = newimage;
}
var showImages = setInterval("showNewImage()",15000);
showFirstImage();
</script>
</div>
</body>
</html>
問題はここで見ることができます(上記のようなFirefoxの問題では、クロムでは画像の読み込みの間に一時停止がなく、画像の変更の間に空白のウィンドウがあります):http://sabine-schneider.silbe.org:1666/test。 html
そして、ここで、Robが回答1で変更なしで提案したこと(Firefoxでは画像を正常に表示しますが、クロムでは表示しません-画像の変更の間に空白のウィンドウが表示されます):http ://sabine-schneider.silbe.org:1666 /test0.html