2009-04-14 14 views
1

Gibt es eine Möglichkeit, nach dem Rendern eine Seite zu scrollen oder eine Seite herunterzuspringen?Bildlauf nach dem Rendern in Rails

Insbesondere in meiner Controller-Aktion gibt es einige Situationen, in denen ich den Benutzer an einen bestimmten Ort auf der Seite senden möchte. Wenn es nur eine Verknüpfung von einer anderen Seite wäre, würde ich wahrscheinlich eine URI-Fragment-ID verwenden - "" - aber dies muss abhängig von einer Bedingung dynamisch generiert werden.

Vielleicht muss ich JavaScript (Prototype) irgendwie verwenden, aber ich weiß nicht, wie man die Funktion aufruft, sobald die Seite geladen ist, vor allem vom Controller.

Antwort

3

Sie sollten diese Art von Sache aus Ihrer Sicht wirklich tun. In Ihrem Controller sollten Sie Ihre Bedingung auswerten, um den Teil der Seite zu ermitteln, den Sie anzeigen möchten, und dann das Ergebnis in die Ansicht übernehmen. Sie können diese Informationen dann in Ihrer Ansicht verwenden, um ein kleines Stück JavaScript am unteren Rand der Seite hinzuzufügen, das in etwa wie folgt aussieht. Natürlich bedeutet dies nicht helfen, wenn der Benutzer Javascript deaktiviert hat;)

Controller-Code:

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

Ansicht Ansicht Code:

<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

Das ist ein guter Punkt! Danke Daniel. – Raphomet

0

Sie Browser blättern in eine Position haben können auf der Seite durch Einfügen eines Fragmentteils in die URL, die auf die Seite verweist. z.B. http://example.com/index.html#section3 scrollt die Seite zu dem Element mit 'id' section3. Sie können diese ID für einen Link, einen Absatz usw. verwenden. Der Browser stellt sicher, dass das Element nach dem Rendern sichtbar ist.

1

Wenn Sie mit jQuery, eine Antwort wie folgt sein könnte:

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

Oder wenn Sie wirklich Lust sein wollen (empfohlen), können Sie die Scroll oben wie so animieren:

$("body").animate({scrollTop: $("#my-element").position().top},1000); 
Verwandte Themen