投稿のすべてのコメントを表示するためにクリックしたときに、google+が持つのと同じブラインドロールダウンのような効果を達成しようとしています。いくつか検索した後、私はhttp://docs.jquery.com/UI/Effects/Blind#overviewを見つけましたが、それは私が求めている効果を達成していません。
このhtmlにすでに存在するコードは部分的なものではなく、ユーザーがページに入ったときにデフォルトで(2)播種されたコメントをレンダリングするのに役立つコードです。部分的なコメントは、[すべて表示]リンクをクリックするとこの前に配置され、押し下げられます。すべてのコメントを表示する前にさらにコメントを入力すると、コメントが切り取られ、最新の2つのコメントが残ります。
html:
<% if m.comments.any? %>
<div class="allCommentsWrapper">
<% comments(m.id).each do |comment| %>
<div class="comment_container">
<%= link_to image_tag(default_photo_for_commenter(comment), :class => "commenter_photo"), commenter(comment.user_id).username %>
<div class="commenter_content"> <div class="userNameFontStyle"><%= link_to commenter(comment.user_id).username.capitalize, commenter(comment.user_id).username %> - <%= simple_format h(comment.content) %> </div>
</div><div class="comment_post_time"> <%= time_ago_in_words(comment.created_at) %> ago. </div>
</div>
<% end %>
</div>
<% end %>
JQuery:
$('.view_all_comments').off().on('ajax:success', function(e){
e.preventDefault();
$(this).parents('.post_content').find('.comment_container').slice(0, -2).remove();
$(this).parents('.post_content').find('.comment_container:first').before("<%= j render 'users/partials/show_all_comments', :comments => @comments %>");
$(this).parents('.post_content').find('.allCommentsWrapper').hide().show("blind", { direction: "vertical" }, 6000);
});
とにかく、これは私が求めている効果を達成しません。これは、コンテンツが別の背景に貼り付けられているようで、allCommentsWrapper divが下にスライドすると、各コメントが表示されます。コメントがdivに貼り付けられているように見せたいので、下にスライドすると、divが下から引っ張られているように見えますが、上部は非表示になっていますが、その上のdivのすぐ後ろにあるように見えます。
私が何を意味するのかを知る最良の方法は、google +にアクセスし、たとえば「23コメント」をクリックして、それらが下にスライドするのを見るのです。
可能であれば、解決策といくつかのヒントをいただければ幸いです。
敬具