2011-01-20 7 views
1

私はプロファイルイメージを表示しています。そのイメージが特定の次元よりも大きければ私はそれを拡大したいので、私はそのイメージにonloadイベントを添付します。画像がロードされた後、それが大きいかどうかをチェックし、そうであれば、それをより小さな画像にスケーリングします。画像が読み込まれるまで、読み込みアニメーションを表示しています。他のイベントハンドラでこのキーワードを使用する方法

<td height="203" valign="middle" align="center"><div id="loadingdiv">Loading... 
</div><img style="display:none;" id="proimg" src="<?=$path?>" /> 
</td> 

<script type="text/javascript"> 

var pro = document.getElementById('proimg'); 
pro.onload = function() 
{ 
    if(this.width>260)this.style.width = '260px'; 
    if(this.height>200)this.style.height = '200px'; 
    window.setTimeout(function() { 
     document.getElementById('loadingdiv').style.display = 'none'; 
     this.style.display = 'inline'; 

    },1000); 
} 

</script> 

読み込みアニメーションが消えて1秒後に画像が表示されます。それは私が欲しいものなので、私はそれを上記のようにしました。このonloadをsettimeoutイベントハンドラに参照する方法はありますか?

settimeoutがなければ、うまく動作しますが、私はそのことができますが、遅延を表示したいだけです。

編集:私はこれを行うための別の方法や考え方があるはずと思っ最初reply.Butのように行うために使用

私はここで閉鎖することはできますか?私は別の可変参照を使用しないでください。

答えて

2

このキーボードは匿名イベントハンドル関数内では使用できませんが、現在のthisの参照を作成してから、その参照を使用してオブジェクトのメソッド/プロパティを呼び出すことはできます。ここに例があります:

var that = this; 
window.setTimeout(function() { 
    that.style.display = 'inline'; 
}, 1000); 
+0

これは問題ありません。それは私のやり方ですが、私はそこに何か他の選択肢やコンセプトがあると思っていました。閉鎖にはここで何かする必要がありますか?私はまだ閉鎖をまだ理解していません。 –

+1

問題は、匿名関数が外部参照からの参照を上書きするこの参照を作成することです。 – Sheavi

+0

参照を作成する以外の方法はありませんか? –