2009-04-14 18 views
1

レンダリング後にページをスクロールまたはスクロールする方法はありますか?レンダリング後のページを下にスクロールする

特に、私のコントローラーのアクションでは、ユーザーをページ上の特定の場所に送信したい場合があります。もしそれが別のページからの単なるリンクだったら、おそらくURIフラグメント識別子 - "http://blorg.com/page#id"を使うでしょう - しかしこれはある条件によって動的に生成される必要があります。

JavaScript(Prototype)を何とか使う必要があるかもしれませんが、ページがロードされた後、特にコントローラから関数を呼び出す方法がわかりません。

答えて

3

あなたは実際にこの種のことをあなたの視点で行うべきです。コントローラでは、条件を評価して表示するページの部分を決定し、その結果をビューに渡す必要があります。この情報をビューで使用して、ページの下部に次のような小さなJavaScriptを追加することができます。ユーザーJavaScriptがオフになった場合はもちろん、これはあなたを助けることはありません。)

コントローラーコード:

def index 
    # evaluate the condition 
    @section = (rand*10).to_i 
end 

ビュービューコード:

<div id="#section1">some stuff</div> 
.... 
<div id="#section9">other stuff</div> 

<% if @section>0 %> 
<script type="text/javascript"> 
// <!-- 
document.location.hash="#section<%= @section %>"; 
// --> 
</script> 
+0

これは良い点です!ダニエルありがとう。 – Raphomet

0

を、あなたは位置に、ブラウザのスクロールを持つことができますそのページにリンクするURLにフラグメント部分を含めることによってページをダウンさせる。例えばhttp://example.com/index.html#section3は、ページを 'id' section3の要素にスクロールします。そのIDをリンク、段落などで使用することができます。ブラウザは、レンダリング後に要素が表示されることを確認します。

1

あなたはjQueryのを使用している場合は、次のように答えは次のようになります。

$("body").scrollTop($("#my-element").position().top; 

それとも、(推奨)本当に空想になりたい場合は、あなたがそのようなスクロールトップをアニメーション化することができます

$("body").animate({scrollTop: $("#my-element").position().top},1000); 
関連する問題