いつもお世話になっております。
現在RailsでWebページを作成しております。
kaminari + jscrollで無限スクロールを実現しており、下までスクロールされると次の部分が次々によまれていくような形になっております(twitterのようなイメージ)。
初期状態ではユーザーの情報が、10件表示されており、一番下から5%の位置までスクロールされると、次の10件分が表示されていく仕様となっています。
例えば下にスクロールしていき、50件を表示している状態で、ブラウザの更新ボタンを押すと、一瞬一番上へ移動するのですが、その後すぐ更新前の位置に戻ってしまうのですが、これを初期の10件分表示に戻したいと考えています(これもtwitterのようなイメージです)。
現状以下のように、リロード時に一番上に戻るjavascriptを実装している状態です。
こういった制御はどのようにすればよいのでしょうか。
調べ方が悪いとは思うのですが、ググっても分からずこちらに質問させていただきました。
参考になるサイトでも構いませんので、適切な方法をご教示いただけますと幸いです。
よろしくお願いいたします。
環境
Amazon Linux release 2 (Karoo)
Rails 5.2.3
Ruby version: 2.6.1
ruby
1 2 # users_controller.rb 3 4 def show 5 @users = User.all.page(params[:page]).per(10).order(id: "DESC") 6 render 'administrator_users/show' 7 end 8
ruby
1 # show.html.erb 2 3 <ul class="skill-list jscroll"> 4 <% @users.each do |user| %> 5 <ul class="content"> 6 <li class="content_right"> 7 <div class="status"> 8 <dl><dt>xxx</dt><dd><%= user.xxxx %></dd></dl> 9 <dl><dt>yyy</dt><dd><%= user.yyy %></dd></dl> 10 <dl><dt>zzz</dt><dd><%= user.zzz %></dd></dl> 11 <div class="status_more"> 12 <dl><dt>aaa</dt><dd><%= user.aaa %></dd></dl> 13 <dl><dt>bbb</dt><dd><%= user.bbb %></dd></dl> 14 <dl><dt>ccc</dt><dd><%= user.ccc %></dd></dl> 15 <dl><dt>ddd</dt><dd><%= user.ddd %></dd></dl> 16 <dl><dt>eee</dt><dd><%= user.eee %></dd></dl> 17 </div> 18 <a href="/" class="bt_more"><span>表示する</span></a> 19 </div> 20 </li> 21 </ul><!-- /.content --> 22 <% end %> 23 <%= paginate @users %> 24 </ul><!-- /.skill-list .jscroll -->
javascript
1 // 下までスクロールされたら次のページを読み込む 2 $(window).on('scroll', function() { 3 scrollHeight = $(document).height(); 4 scrollPosition = $(window).height() + $(window).scrollTop(); 5 if ( (scrollHeight - scrollPosition) / scrollHeight <= 0.05) { 6 $('.jscroll').jscroll({ 7 autoTrigger: true, 8 padding: 20, 9 contentSelector: '.skill-list', 10 nextSelector: 'span.next:last a', 11 callback: function() { 12 $(this).find(".bt_more").prevAll('.status_more').hide(); 13 }); 14 } 15 16 }); 17 18 // ページ読み込み後一番上へ移動する 19 $(document).ready(function(){ 20 $('html,body').animate({ scrollTop: 0 }, '1'); 21 });
ruby
1 2# Gemfile 3 4source 'https://rubygems.org' 5git_source(:github) { |repo| "https://github.com/#{repo}.git" } 6 7ruby '2.6.1' 8 9# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' 10gem 'rails', '~> 5.2.4', '>= 5.2.4.1' 11# Use mysql as the database for Active Record 12gem 'mysql2', '>= 0.4.4', '< 0.6.0' 13# Use Puma as the app server 14gem 'puma', '~> 3.11' 15# Use SCSS for stylesheets 16gem 'sass-rails', '~> 5.0' 17# Use Uglifier as compressor for JavaScript assets 18gem 'uglifier', '>= 1.3.0' 19# See https://github.com/rails/execjs#readme for more supported runtimes 20# gem 'mini_racer', platforms: :ruby 21 22# Use CoffeeScript for .coffee assets and views 23gem 'coffee-rails', '~> 4.2' 24# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks 25#gem 'turbolinks', '~> 5' 26# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder 27gem 'jbuilder', '~> 2.5' 28# Use Redis adapter to run Action Cable in production 29# gem 'redis', '~> 4.0' 30# Use ActiveModel has_secure_password 31gem 'bcrypt', '~> 3.1.7' 32 33# ページング用Gem 34gem 'kaminari', '~> 0.17.0' 35# jquery用 36gem "jquery-rails" 37 38gem 'pry-rails' 39gem 'pry-doc' 40gem 'pry-byebug' 41gem 'pry-stack_explorer' 42 43# OGP対応 44gem "opengraph_parser" 45 46# S3対応 47gem 'aws-sdk-s3' 48gem 'aws-ses', '~> 0.6' 49gem 'carrierwave' 50gem 'fog-aws' 51 52# minimagic 53gem 'mini_magick' 54 55# 通知 56gem 'snackbarjs-rails' 57 58# cron 59gem 'whenever' 60 61 62 63# Reduces boot times through caching; required in config/boot.rb 64gem 'bootsnap', '>= 1.1.0', require: false 65 66group :development, :test do 67 # Call 'byebug' anywhere in the code to stop execution and get a debugger console 68 gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] 69end 70 71group :development do 72 # Access an interactive console on exception pages or by calling 'console' anywhere in the code. 73 gem 'web-console', '>= 3.3.0' 74 gem 'listen', '>= 3.0.5', '< 3.2' 75 # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring 76 gem 'spring' 77 gem 'spring-watcher-listen', '~> 2.0.0' 78end 79 80group :test do 81 # Adds support for Capybara system testing and selenium driver 82 gem 'capybara', '>= 2.15' 83 gem 'selenium-webdriver' 84 # Easy installation and use of chromedriver to run system tests with Chrome 85 gem 'chromedriver-helper' 86end 87 88# Windows does not include zoneinfo files, so bundle the tzinfo-data gem 89gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] 90