2011-01-24 17 views
0

また、指定した画面jQueryの負荷イメージが繰り返し

APIのための画像を提供していますほとんどがjQueryで動くフロントエンドを持っています。

私はimgタグを持っています。このタグは、現在選択されているスクリーンのスクリーンショットを表示し、背後の適切なAPIを呼び出すマウスの移動/クリックイベントを持っています。

画面イメージは、現在、次のように更新されます

OK動作しますが、途方もなく非効率的である
function UpdateScreen() { 
     $("#Screenshot").attr("src", "./AJAX/UI/GetScreen.aspx?Screen=" + encodeURIComponent(targetScreen) + "&Date=" + encodeURIComponent(Date())); 
     setTimeout('UpdateScreen()', 3000); 
    } 

- のいずれかを3秒未満での画像のロードが、その場合には、私のリフレッシュレートは、それがあるべきよりも低くなっていますまたは3秒を超えて古いリクエストが終了した場合(2G以上のモバイルなど)

イメージの読み込みが完了したらすぐにイメージを再読み込みできますか?さらに、ブラウザに頼るのではなく、AJAXの呼び出しと同じ方法でそれを行うことができますか?こうすることで、失敗をキャッチし、進行状況バーを表示したり、バックバッファのようなものを使ってイメージの再描画を制御したりすることができます。事前に

おかげ

答えて

2

function UpdateScreen() { 
    var img = new Image(); 
    img.onload = function() { 
    $("#Screenshot").attr("src", this.src); 
    setTimeout(UpdateScreen, 3000); 
    } 
    img.src = "./AJAX/UI/GetScreen.aspx?Screen=" + encodeURIComponent(targetScreen) + "&Date=" + encodeURIComponent(new Date()); 
} 
+0

パーフェクトおかげで、これを試してみてください!私がした唯一のことはタイムアウトを取り除くことです – Basic

1

は、画像上の負荷イベントを使用して...ネイティブのJavascript Imageオブジェクトを使用してタイムアウトを設定する前に発射するonloadイベントを待ちます。すなわち:

$("#Screenshot").load(UpdateScreen); 
    function UpdateScreen(){ 
    $("#Screenshot").attr("src", "./AJAX/UI/GetScreen.aspx?Screen=" 
    + encodeURIComponent(targetScreen) + "&Date=" + encodeURIComponent(Date()));   
} 
+0

私はこのソリューションのシンプルさが好きです.1つだけですが、 'Image'オブジェクトを使って別のポスターに付与したいのですが、私が望む追加のコントロールを与えます – Basic

1

...

function UpdateScreen() { 

    var imgSrc = "./AJAX/UI/GetScreen.aspx?Screen=" + encodeURIComponent(targetScreen) + "&Date=" + encodeURIComponent(Date()), 
     img = new Image(); 

    img.onload = function() { 
    $("#Screenshot").attr("src", img.src);   
     setTimeout(UpdateScreen, 3000); 
    }; 

    img.src = imgSrc; 

} 
+0

理想的なソリューションありがとう - ジョシュに与えられたのは、 – Basic