質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

0回答

2102閲覧

MasonryとInfinite Scroll導入でエラー。1ページ目の下に2ページ目が潜り込む・・・。

Daimian

総合スコア53

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/06/15 04:50

編集2018/06/15 05:34

前提・実現したいこと

【通常時】
index
【エラー画像(1ページ目の下に2ページ目が潜り込む)】
スクロールした際の状態
【補足:】作成アプリと問題点のGIF

ruby on rails5で音楽のジャケットを閲覧できるアプリを作成しております。レイアウトはmasonryを使用しています。音楽のデータが大量(1,000件)にあるため、infinite scrollを使用してスクロールする度に次の150件が表示される設計にしようとしています。

しかしながら、スクロールをして、2ページ目が表示される部分に差し掛かると、1ページ目の下に2ページ目が食い込むような形でinfinite scrollが発動されます。。

この問題が解けずに2日くらい悩んでいます。。
どなたか解決法がわかる方、もしくはヒントでも結構ですのでご教示いただければ幸いです。

該当のソースコード

js

1$(document).on('turbolinks:load', function(){ 2 var $main = $('.main'); 3 4 $main.masonry({ 5 itemSelector : '.box', 6 isAnimated: true, 7 animationOptions: { 8 duration: 800, 9 easing: 'swing' 10 } 11 }); 12 13 $main.infiniteScroll( { 14 path : ".next a", 15 append : ".popup-modal", 16 scrollThreshold: 40, 17 history : false 18 }); 19});

html

1<div class="main"> 2 <% @artworks.each do |artwork| %> 3 <% if artwork.size == 1 then %> 4 <div class="box size--1""> 5 <%= image_tag artwork.image %> 6 </div> 7 <% elsif artwork.size == 2 then%> 8 <div class="box size--2"> 9 <%= image_tag artwork.image %> 10 </div> 11 <% elsif artwork.size == 3 then%> 12 <div class="box size--3"> 13 <%= image_tag artwork.image %> 14 </div> 15 <% end %> 16 <% end %> 17 18 <div class="navigation" id="navigation" style="display:none;"> 19 <%= paginate @artworks %> 20 </div> 21</div>

css

1body { 2 position: relative; 3} 4 5.main { 6 margin-top: 86px; 7 margin-left: 20px; 8 margin-right: 10px; 9 width: auto; 10 height: auto; 11 12 img { 13 max-width: 100%; 14 height: 100%; 15 border-radius: 6px 6px 6px 6px; 16 } 17 18 .box { 19 margin: 5px; 20 padding: 2px; 21 box-shadow: 5px 10px 20px rgba(0,0,0,0.25); 22 background-color: #FFF; 23 } 24 25 26 .size { 27 margin: 0px; 28 29 &--1 { 30 width: 100px; 31 height: 100px; 32 } 33 34 &--2 { 35 width: 100px; 36 height: 125px; 37 } 38 39 &--3 { 40 width: 100px; 41 height:140px; 42 } 43}

試して見たこと

inifinite-scroll公式サイト
公式サイトにあるデモ

上記2つのリンクから解決法を考え、
一度、上部のソースコードにあるJavaScriptに下記2つの記述をしてみました。

① masonryのデータを取得

var msnry = $main.data('masonry');

② さらに、inifiniteScrollにオプション追加

outlayer : msnry,

しかしながらこれを実践すると、エラーGIFのように、Masonryのコードで何かが引っかかってエラーになります(下記参照)。。

↓console上のエラー表示

jquery.masonry.self-e55a2ca40f0bd20129930439c10a6b8c5dd26787b41fd8427db5b9da8c2af52f.js?body=1:93 Uncaught TypeError: $elems.filter is not a function at $.Mason._filterFindBricks (jquery.masonry.self-e55a2ca40f0bd20129930439c10a6b8c5dd26787b41fd8427db5b9da8c2af52f.js?body=1:93) at $.Mason._getBricks (jquery.masonry.self-e55a2ca40f0bd20129930439c10a6b8c5dd26787b41fd8427db5b9da8c2af52f.js?body=1:97) at $.Mason._appended (jquery.masonry.self-e55a2ca40f0bd20129930439c10a6b8c5dd26787b41fd8427db5b9da8c2af52f.js?body=1:353) at $.Mason.appended (jquery.masonry.self-e55a2ca40f0bd20129930439c10a6b8c5dd26787b41fd8427db5b9da8c2af52f.js?body=1:348) at InfiniteScroll.proto.onAppendOutlayer (infinite-scroll.pkgd.self-1ea8b2b51502ba9419567d1ee98f1fa1fcdbaa6ec3c5c4b6d1dcd4f1f6866c63.js?body=1:1114) at InfiniteScroll.proto.emitEvent (infinite-scroll.pkgd.self-1ea8b2b51502ba9419567d1ee98f1fa1fcdbaa6ec3c5c4b6d1dcd4f1f6866c63.js?body=1:255) at InfiniteScroll.proto.dispatchEvent (infinite-scroll.pkgd.self-1ea8b2b51502ba9419567d1ee98f1fa1fcdbaa6ec3c5c4b6d1dcd4f1f6866c63.js?body=1:689) at InfiniteScroll.<anonymous> (infinite-scroll.pkgd.self-1ea8b2b51502ba9419567d1ee98f1fa1fcdbaa6ec3c5c4b6d1dcd4f1f6866c63.js?body=1:1047) at ImagesLoaded.proto.emitEvent (infinite-scroll.pkgd.self-1ea8b2b51502ba9419567d1ee98f1fa1fcdbaa6ec3c5c4b6d1dcd4f1f6866c63.js?body=1:255) at ImagesLoaded.complete (infinite-scroll.pkgd.self-1ea8b2b51502ba9419567d1ee98f1fa1fcdbaa6ec3c5c4b6d1dcd4f1f6866c63.js?body=1:2069)

エラー画像
↓$elems.filter is not a functionって言われたのでその該当箇所

_filterFindBricks: function( $elems ) { var selector = this.options.itemSelector; // if there is a selector // filter/find appropriate item elements return !selector ? $elems : $elems.filter( selector ).add( $elems.find( selector ) ); },

エラー画像2

よろしくお願いいたします。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/06/15 04:54 編集

画面キャプチャは外部サービスではなくteratail内の機能をお使いください。リンクにもなっていないので確認のためのコピペの手間も発生しますし、何かの障害などでその外部サービスが利用できなくなったときにキャプチャ見れなくなりますので。
Daimian

2018/06/15 05:01

ご指摘ありがとうございます、やって見ます!
m.ts10806

2018/06/15 05:11

いえ・・リンクにして欲しかったわけではなく、画像をteratail内の画像アップロード機能使って欲しかったんですが・・・
Daimian

2018/06/15 05:35

編集しました、すいません、よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問