2011-07-06 9 views
0

私は、レールアプリケーションで一定の時間間隔で一連の画像を表示しようとしています。今私はこれのためにjavascriptを使用して、表示される各スライド間の時間のユーザーからのタイミングを取っています。今私はデータベースから時間をフェッチしようとしているjavascriptのsetTimeout関数を使用しています。つまり、my tablesという名前のスライドです。Rails Javascript Database Doubt

画像が変化しているしかし、これはこれは、画像変更機能

function slideit(){ 
//if browser does not support the image object, exit. 
if (!document.images) 
return; 
document.images.slide.src=eval("preloaded["+step+"].src"); 
if (step<10) 
step++; 
else 
step=0 ; 
<% @slides.each do |slide| %> 
setTimeout("slideit()",'<%= slide.time.to_i %>') 

    <% end %> 
} 

の私の抜粋ですプリロードイメージのため

var preloaded = new Array(); 


for (var x = 0; x < 10; x++) 
{ 
    preloaded[x]  = new Image(); 
    preloaded[x].src = "/images/pausch/img"+x+".gif"; 
} 

私のコードスニペットでは、いくつかのランダムな時間であり、時間に応じません保存される。誰も何が間違っていると示唆できますか?

+0

可変ステップは、値ステップ= 0でグローバルです。それを置くのを忘れてしまった。 – Saagar

+0

クライアントに表示される生成された 'setTimeout()'行の例を表示できますか?時間切れのタイムアウトが発生している可能性があります。[このリンク](http://ejohn.org/blog/how-javascript-timers-work/)が役立つかもしれません。 –

+0

まあ、基本的には、テーブルの最後のエントリを「時間」列に格納しています。私は1,2,3,4として4つのエントリを持っていた場合、デフォルトでそれは4だけを格納します。エントリのそれぞれを生成する方法はありますか?私は配列のテーブルのすべてのエントリを格納し、forループでsetTimeout関数を実行する考えていた...私は、私はそれぞれの画像の表示の間に異なる間隔を与えたいと思う、これは正しい方法ですか? – Saagar

答えて

1

は、関数内からsetTimeout()呼び出しを削除してください、と関数の外のどこかsetInterval(slideit,1000)(例えば)への呼び出しを置く:

.... 
    document.images.slide.src = preloaded[step].src; 

    if (step<10) step++; 
    else step=0; 
} 
setInterval(slideit,1000); 

これは、すべて1000のミリ秒と呼ばれるslideit()ではなく、複数の割り当てが発生します関数が呼び出されるたびにタイムアウトが発生します。

メモpreloaded[step].src行からはeval()コールといくつかの余分な引用符も削除しました。タイムアウトには影響しませんが、配列の内容は単なる文字列であるため、ここでは評価する必要はありませんセキュリティ上の理由から、可能であればeval()を使用しないことをお勧めします)。

編集:各画像のタイムアウトが異なることを丁度見ました。あなたは、各エントリtimeouts[x]は画像xを表示するためにミリ秒単位の数が含まれていtimeoutsという配列を初期化したいと思う、この解決のために

.... 
    document.images.slide.src = preloaded[step].src; 

    setTimeout(slideit,timeouts[step]); 

    if (step<10) step++; 
    else step=0; 
} 

:私は、setTimeoutを単一の呼び出し()でこれを行うだろう。