2010-11-27 18 views
2

ボタンをマウスでクリックすると、divの画像がRailsの別の部分に切り替わります。問題は、その部分的に画像を読み込むのが遅いということです。画像をあらかじめ読み込みたいのですが。これを行う方法はありますか?どういうわけか部分的にプリロードできますか?私の見解でjavascriptでレールに部分図をあらかじめロード

[email protected]_images.each do |img| 
    .thumbnail_wrapper 
    .thumbnail_image 
     =image_tag img.image.url(:thumbnail), :class => 'button' , :onClick => "replaceImg(#{img.id});" 

JS

function replaceImg(id){ 
    var url = '/images/refresh/' + id; 
    new Ajax.Updater('content_image', url); 
} 

多くの感謝!

答えて

1

私はあなたの部分がビューでレンダリングされていると考えます。事前ロードは、ブラウザがリソースを必要としていることを確認するためにブラウザを不正にしています。

Javascriptを

あなたが実際にJavaScriptで示される前にプリロードするために画像を強制することができます。

<script language="javascript"> 
function img_preloader() { 
    myimg = new Image(); 
    images = new Array(); 
    images[0]="image1.jpg"; 
    images[1]="image2.jpg"; 
    images[2]="image3.jpg"; 
    images[3]="image4.jpg"; 

    // start preloading 
    for(i=0; i<=3; i++) { 
      myimg.src=images[i]; 
    } 
} 
</script> 

このようにあなたのイメージの1がロードされているforループ内のすべての反復のために。プログラムであなたは(ERBに)することができ、アレイを生成するために

<script language="javascript"> 
function img_preloader() { 
    myimg = new Image(); 
    images = new Array(); 
    <% @array_of_img_paths.each do |path| %> 
    images.push("<%= path %>"); 
    <% end %> 

    // start preloading 
    for(i=0; i<images.length; i++) { 
      myimg.src=images[i]; 
    } 
} 
</script> 

ただ、HTML

  • は、プログラムあなたが
  • をプリロードするすべての画像のための1つのiframeを開くには、SRCを設定しましたiframeをプリロードする画像に
  • iframeのサイズをできるだけ小さく設定する

ブラウザとサーバーの設定に従って、画像が並列に読み込まれます。あなたがプリロードしたいすべての画像について

div.noone_will_see { 
    background-image: url("image1.jpg"); 
    background-repeat: no-repeat; 
    background-position: -1000px -1000px; 
} 

反復:

CSSはあなたが表示されますのdiv誰もの背景画像としてプリロードするイメージを設定します。

+0

おかげさまで、ありがとうございました。私はそれほど知っていますが、それほど簡単ではないので止まっています。 images [0] = "image1.jpg"; 私はむしろやるでしょう: images [id] = "image" + id + "。jpg"; これを行うには、その時点でページ上の画像のIDを知る必要があります(それらは異なります)。だから私はこのjs関数に私のレール変数を渡す必要があります... varが別の.jsファイルにある場合、私はこの仕事をするように見えることができません。だから私は部分的に直接レンダリングすることを望んでいた。ガー..これは少し混乱している場合はごめんなさい。 – mtay

+0

ご清聴いただきありがとうございます。画像[id] = "image" + id + ".jpg"を実行すると何が問題になりますか? HTML内にjsスニペットを作成するには、事前ロードする画像のevey IDを繰り返します。画像が荒れている可能性があるので、jsは変化するので、別のページのjsを共有することはできません。 – lbz

+0

あなたのご回答ありがとうございます!まあ、それはいいようです。しかし、私はどのようにIDが何であるのか私のjs関数に伝えるのですか?申し訳ありませんが、私は初心者です - 今、idはrails変数@feature_image.idに保存されています。ページの読み込みが完了したら、何とかその変数を取得して、js関数にこれがidであり、そこからインクリメントすることを伝えたいと思います。しかし、私はそれを行う方法について私の髪を引っ張っています。私は何が欠けていますか? – mtay

関連する問題