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

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

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

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

jQuery

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

Q&A

解決済

2回答

3656閲覧

画像遅延により、jquery.matchHeight.jsがうまく反応しない。

satoru225Simple

総合スコア27

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2020/02/05 03:51

編集2020/02/05 04:34

前提・実現したいこと

lazysizesという画像遅延のjsを使いつつ、
jquery.matchHeight.jsを使って、画像の高さをそろえたいと考えております。
が、画像遅延の影響で、高さがそろわなくなっております。

発生している問題・エラーメッセージ

画像遅延で、画像箇所に到達した時点で、
画像が読み込まれるため、下のほうの画像に関して、高さが0になってしまいます。

該当のソースコード

html

html

1<ul id="sample"> 2 <li><img class="lazyload" data-src="http://placehold.it/150x150"></li> 3 <li><img class="lazyload" data-src="http://placehold.it/150x250"></li> 4<li><img class="lazyload" data-src="http://placehold.it/150x200"></li> 5 <li><img class="lazyload" data-src="http://placehold.it/150x150"></li> 6 <li><img class="lazyload" data-src="http://placehold.it/150x250"></li> 7<li><img class="lazyload" data-src="http://placehold.it/150x200"></li> 8 <li><img class="lazyload" data-src="http://placehold.it/150x150"></li> 9 <li><img class="lazyload" data-src="http://placehold.it/150x250"></li> 10<li><img class="lazyload" data-src="http://placehold.it/150x200"></li> 11 <li><img class="lazyload" data-src="http://placehold.it/150x150"></li> 12 <li><img class="lazyload" data-src="http://placehold.it/150x250"></li> 13<li><img class="lazyload" data-src="http://placehold.it/150x200"></li><li><img class="lazyload" data-src="http://placehold.it/150x150"></li> 14 <li><img class="lazyload" data-src="http://placehold.it/150x250"></li> 15<li><img class="lazyload" data-src="http://placehold.it/150x200"></li> 16 <li><img class="lazyload" data-src="http://placehold.it/150x150"></li> 17 <li><img class="lazyload" data-src="http://placehold.it/150x250"></li> 18<li><img class="lazyload" data-src="http://placehold.it/150x200"></li> 19 <li><img class="lazyload" data-src="http://placehold.it/150x150"></li> 20 <li><img class="lazyload" data-src="http://placehold.it/150x250"></li> 21<li><img class="lazyload" data-src="http://placehold.it/150x200"></li> 22 <li><img class="lazyload" data-src="http://placehold.it/150x150"></li> 23 <li><img class="lazyload" data-src="http://placehold.it/150x250"></li> 24<li><img class="lazyload" data-src="http://placehold.it/150x200"></li> 25 <li><img class="lazyload" data-src="http://placehold.it/150x150"></li> 26 <li><img class="lazyload" data-src="http://placehold.it/150x250"></li> 27<li><img class="lazyload" data-src="http://placehold.it/150x200"></li> 28 <li><img class="lazyload" data-src="http://placehold.it/150x150"></li> 29 <li><img class="lazyload" data-src="http://placehold.it/150x250"></li> 30<li><img class="lazyload" data-src="http://placehold.it/150x200"></li> 31 <li><img class="lazyload" data-src="http://placehold.it/150x150"></li> 32 <li><img class="lazyload" data-src="http://placehold.it/150x250"></li> 33<li><img class="lazyload" data-src="http://placehold.it/150x200"></li> 34 <li><img class="lazyload" data-src="http://placehold.it/150x150"></li> 35 <li><img class="lazyload" data-src="http://placehold.it/150x250"></li> 36<li><img class="lazyload" data-src="http://placehold.it/150x200"></li> 37 38</ul> 39

css

css

1ul { 2 max-width: 960px; 3 width: 100%; 4 overflow: hidden; 5 margin: 0 auto; 6} 7li { 8 float: left; 9 width: 150px; 10 margin: 5px; 11 list-style:none; 12 background:red; 13} 14

実行用のコード

js

1$(function() { 2 $('#sample li').matchHeight(); 3});

lazysizesに関してはこちら、
http://afarkas.github.io/lazysizes/

jquery.matchHeight.jsはこちら
https://brm.io/jquery-match-height/

下記はコードペンにて、再現したものになります。
https://codepen.io/satoru1993/pen/OJVLwGz

試したこと

lazysizesのコードをもともと</body>上に設置していたのを

</head>直上に変更してみましたが、 変わりませんでした。

また、
https://gamp.ameblo.jp/mikuxmiku/entry-12507993473.html
上記記事の


画像遅延読み込み・・・・。ってことはこれはまだ画像が読み込み終わってないときに、

matchHeight処理されてたらheight:0px;になるのは当然じゃないか??笑

という事で処理タイミングを見直してみました。

$('.lazyload').trigger('unveil').bind('load', function(){
$('img').matchHeight();
}

というのがあり、lazysizesに関しても、
処理タイミングを変えたらできるのではと
いう仮説まで立てておりますが、実際どこを
変えればいいのかまではよくわかっておりません。

補足情報(FW/ツールのバージョンなど)

jqのバージョンは3.1.1なります。

実際のサイトですが、
私都合で申し分けないのですが、
現状公開できていないため、
URLが載せられません。
申し訳ございません。

お手数をおかけしますが、お知恵を貸していただけますと幸いです。

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

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

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

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

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

kei344

2020/02/05 03:54

プラグイン/ライブラリは公式配布サイトのURLを質問文に追記ください。(URLにはリンクを張ることができます) また、再現可能なコードもコードブロックで質問文に追記してください。コードブロックは ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
satoru225Simple

2020/02/05 04:35 編集

ご指摘ありがとうございます。 質問文にURLと、再現可能なコードも追加しました。 lazysizesと jquery.matchHeight.js に関しては、コードが長く、入りきらなかったため、 https://codepen.io/satoru1993/pen/OJVLwGz 上記にて、再現したものを用意し、そちらにlazysizesと jquery.matchHeight.jsのjsコードも入れました。 何卒宜しくお願い致します。
guest

回答2

0

ベストアンサー

lazysizesが用意しているlazybeforeunveilイベントを待って、そのたびにmatchHeightを実行すれば多分いけると思いますが、提示のコードのような構成ならmatchHeightを使用せずul要素をflexにすればよいと思います。

【lazysizes/README.md at gh-pages · aFarkas/lazysizes · GitHub】
https://github.com/aFarkas/lazysizes/blob/gh-pages/README.md#js-api---events

CSS

1ul { 2 max-width: 960px; 3 width: 100%; 4 overflow: hidden; 5 margin: 0 auto; 6 display: flex; 7 flex-wrap: wrap; 8}

投稿2020/02/05 04:50

kei344

総合スコア69407

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

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

satoru225Simple

2020/02/05 04:59 編集

ありがとうございます! 確かにこちらでも解決できるかもしれないです。 ただ、今作っているサイトが、matchHeightを全ページにあてているため、 もし可能なら、matchHeightでやりたいと考えております。matchHeightを使って の場合のやり方に関して、 お知恵を貸していただけることはできるでしょうか? お忙しいところ恐縮ですが、お知恵を貸していただけますと幸いです。 何卒宜しくお願い致します。
kei344

2020/02/05 05:01

> お知恵を貸して 回答の最初に書いた物は確認していないのでしょうか。もし提示したものの使い方がわからないとしたら、matchHeightを使用しないという選択肢のほうが妥当だと思います。
satoru225Simple

2020/02/05 05:16

申し訳ございません。 いただいたものを確認して、はじめ理解ができず、投稿致しましたが、 先ほど理解でき、実装することができました。 いろいろと至らない点で、困らせてしまい、申し訳ございませんでした。 無事解決いたしましたので、ベストアンサーにさせていただけたらと思います。
guest

0

imgのすべてがloadを終わるのを待つとか?

投稿2020/02/05 04:34

yambejp

総合スコア114825

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

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

yambejp

2020/02/05 04:54 編集

$(function(){ var d=[]; $('img').each(function(x){ var self=$(this); d[x]=$.Deferred(); $(this).on('load',function(){ d[x].resolve(self.prop('naturalHeight')); /*修正*/ }); }); $.when.apply(null,d).then(function(...height){ console.log(height); console.log("ここで実行"); }); });
satoru225Simple

2020/02/05 04:36

ご回答くださりありがとうございます。 申し訳ございません。知識不足で、 上記のコードをどこに入れるかをご指導いただけますと 幸いです。
yambejp

2020/02/05 04:38

「ここで実行」のところにmatchHeight?の実行を書いてください
satoru225Simple

2020/02/05 04:42

$(function(){ var d=[]; $('img').each(function(x){ var self=$(this); d[x]=$.Deferred(); $(this).on('load',function(){ d[x].resolve($('img').index(self)); }); }); $.when.apply(null,d).then(function(...arg){ console.log(arg); console.log($(function() { $('#sample li').matchHeight(); });); }); }); 上記の認識であっているでしょうか? こちらだと、画像が表示されなくなりました…
kei344

2020/02/05 04:46 編集

To: yambejpさん 提示のコードではページ内の全imgが対象になりますが、lazysizesの機能的に表示エリア前後で読むような実装になっているのではと思います。(コメントが増えていたので宛名を追記しました)
yambejp

2020/02/05 04:54 編集

いやぁ・・・そう読みますか $.when.apply(null,d).then(function(...arg){ console.log(arg); $('#sample li').matchHeight(); で、お願いします。 私の修正したサンプルをみればこの時点でheightが取れていることは わかると思います (matchHeightがどう動くは知りません)
satoru225Simple

2020/02/05 05:20

To: yambejpさん ありがとうございます。 また、こちらの理解不足で申し訳ございませんでした。 こちら、確認できました ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問