javascript jQuery teratail初心者です。よろしくお願い致します。
webサイトを開くと、fadeInしながらサイトを表示させるといった単純なものを作っています。
画像をたくさん張り付けているサイトを想定して作っていまして、
全てが揃ってから表示できるかを見るために
容量の重い画像から軽い画像を30枚くらい表示させています。
重い画像は、あるサイトの航空写真で40M ぐらいの画像を
30枚のうち半分くらい使っています。
jquery, javascript を使い自分なりに調べながら作っていたところ、
chrome では問題なく表現できているのですが、
firefox, edge, IE(11)では、fadeInしながらパラパラと表示していき、
自分が思い描いている全ての画像が同時にfadeInするといった具合になりません。
いくら調べても分かりません。
こういうものだと納得しなければならないのか、
それとも別の方法があるのか、
コード自体まちがっているのか・・・。
どうかお力添えのほう、よろしくお願いいたします。
説明不足と気づいたことがあって質問したいので追記します。
ローディングを作ろうとしています。
「コンテンツ部分を隠しておく」→「ローディング表示」→「コンテンツ表示」の
「ローディング」の部分は後で作るとして、
すべてが読み込まれたらfadeIn して表示させる部分を作ってみました。
現在 各画像をload イベントでとって、読み込み完了したらカウント重ね、
揃ったら親要素をfadeIn させ表示するまではできているのではないかと思っています。
そこで気づいたのが、上記の方にも書きましたが、
chrome以外のブラウザだけ重い画像がパラパラと遅れて表示していることに。
ブラウザによって全てが揃った状態で表示してくれません。
全てが揃っているというのは確実に表示した状態でという意味です。
自分のなかでは、
読み込み完了 = 表示も完了。
だと思っていたので今のような表示の仕方が納得できないのです。
表示を揃えることってできないのか?と思い質問しました。
ここまで重い画像を載せることはしませんし、
軽い画像では現象が見られないためいいかとは思うのですが
軽い画像でも本当の意味では揃ってないのですよね・・・。
あとこれを書いている最中に疑問に思ったことがあったため
申し訳ないのですが質問させていただきます。
今回と関係あるのかもしれません。
よそ様のサイトを見ているときに回線のせいもあるかもしれませんが、
画像が徐々に表示されている状態は
読み込んでいる最中なのか、読み込み完了はしている状態なのか???
今回の場合ですと、loadイベントの中に入ったのか入っていないのか???
これが分かると読み込み完了の意味が少し理解できるのかな・・・
どうかよろしくお願いします。
HTML
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1"> 7 <title></title> 8</head> 9<style> 10 .gallery { 11 display: none; 12 } 13 14 .gallery .container { 15 display: flex; 16 justify-content: center; 17 flex-wrap: wrap; 18 max-width: 1000px; 19 margin: 0 auto; 20 background-color: #ebb7b7; 21 } 22 23 .gallery .container .im { 24 display: inline-block; 25 flex: 1 1 300px; 26 max-width: 300px; 27 } 28 </style> 29<body> 30 <div class="gallery"> 31 <div class="container"> 32 <img src="../images/bg00.jpg" alt="" class="im"> 33 <img src="../images/bg01.jpg" alt="" class="im"> 34 <img src="../images/bg02.jpg" alt="" class="im"> 35 <img src="../images/bg03.jpg" alt="" class="im"> 36 <img src="../images/bg04.jpg" alt="" class="im"> 37 <img src="../images/bg05.jpg" alt="" class="im"> 38 <img src="../images/bg06.jpg" alt="" class="im"> 39 <img src="../images/bg07.jpg" alt="" class="im"> 40 <img src="../images/bg08.jpg" alt="" class="im"> 41 <img src="../images/bg09.jpg" alt="" class="im"> 42 <img src="../images/bg10.jpg" alt="" class="im"> 43 <img src="../images/bg11.jpg" alt="" class="im"> 44 <img src="../images/bg12.jpg" alt="" class="im"> 45 <img src="../images/bg13.jpg" alt="" class="im"> 46 <img src="../images/bg14.jpg" alt="" class="im"> 47 <img src="../images/bg15.jpg" alt="" class="im"> 48 <img src="../images/bg16.jpg" alt="" class="im"> 49 <img src="../images/bg17.jpg" alt="" class="im"> 50 <img src="../images/bg18.jpg" alt="" class="im"> 51 <img src="../images/bg19.jpg" alt="" class="im"> 52 <img src="../images/bg20.jpg" alt="" class="im"> 53 <img src="../images/bg21.jpg" alt="" class="im"> 54 <img src="../images/bg22.jpg" alt="" class="im"> 55 <img src="../images/bg23.jpg" alt="" class="im"> 56 <img src="../images/bg24.jpg" alt="" class="im"> 57 <img src="../images/bg25.jpg" alt="" class="im"> 58 <img src="../images/bg26.jpg" alt="" class="im"> 59 <img src="../images/bg27.jpg" alt="" class="im"> 60 <img src="../images/bg28.jpg" alt="" class="im"> 61 <img src="../images/bg29.jpg" alt="" class="im"> 62 <img src="../images/bg30.jpg" alt="" class="im"> 63 </div> 64 </div> 65 66 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> 67 <script> 68 var img = document.querySelectorAll('.im'); 69 var loadCount = 0; 70 var imgLength = img.length; 71 for (var i = 0; i < img.length; i++) { 72 73 var image = new Image(); 74 image.src = img[i].src; 75 img[i].src = ''; 76 77 img[i].addEventListener('load', function (e) { 78 loadCount++; 79 if (loadCount === imgLength) { 80 $('.gallery').fadeIn(1500); 81 } 82 }, false); 83 img[i].src = image.src; 84 } 85 86 </script> 87</body> 88</html>
回答2件
あなたの回答
tips
プレビュー