###前提・実現したいこと
- ページ内の画像が読み込まれている間はローディングを表示
- 画像が全て読み込まれたら処理を開始
- 画面内に対象の要素が入ったら画面の左からフェードインしながら下から上に移動しながら表示
- 画面途中でリロードした時にすでにスクロールが終わっていて画面から外れている要素にも処理を実行
- ページ内には画像とテキストが混ざっていて、ページによって画像の数もテキストの数も決まっていない
- 「jquery-2.2.4.js」を使用
###想定している処理
- jQuery
画面内に要素が入ったらクラス名「transparent」がある要素にクラス名「fadein」を追加
画像の読み込みが終わったらクラス名「loading」を削除
- css
「fadein」と「transparent」で動きをつける
###発生している問題
- 色々なサイトを参考に下記のようにしてみましたが、スクロールを開始するとまだ画面に入っていない要素にもクラス名がついてしまいます
- 画面途中でリロードしてからスクロールすると画面の外にある「fadein」から順番にクラス名が追加されていき、なかなか画面内の要素にクラス名が追加されません
- 画像の読み込みが終わったらクラス名「loading」を削除するという処理をどこに入れたら良いかがわからなくなりました
###該当のソースコード
javascript
1$(function() { 2 var images = document.getElementsByTagName('img'); 3 for (var i = 0; i < images.length; i++) { 4 var img = new Image(); 5 img.onload = function() { 6 var transparent = $(".transparent"); 7 $(window).scroll(function(){ 8 var transparentPosition = $(transparent).offset().top - $(window).height(); 9 if ($(window).scrollTop() > transparentPosition + 200) { 10 $.each(transparent, function(index) { 11 $(this).delay(index * 500).queue(function() { 12 $(this).addClass('fadein'); 13 }); 14 }); 15 } 16 }); 17 } 18 img.src = images[i].src; 19 }; 20}); 21
(css下記を基本に複数用意しているので一部を抜粋しています)
css
1.transparent .title { 2 opacity : 0; 3 transform : translate(0, 50px); 4 transition: all 500ms ease-out; 5} 6 7.transparent.fadein .title { 8 opacity : 1; 9 transform : translate(0, 0); 10}
lazysizes.jsやinview.jsなどのプラグインとも組み合わせたりして実現できないかと試してみましたがうまくいきませんでした。
色々と調べてみているのですが、どんどんわからなくなってきてしまいました。。
画像が全て読み込まれてから処理が開始されているかどうかの確認の仕方がわからず、ちゃんとその処理も動いているのかもちょっとわかっていません。
想定している処理がそもそも違うなどもございましたらご指摘いただけると幸いです。
とても初歩的なところもあり恐縮ですが、何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/23 03:57
2017/05/23 12:43
2017/05/24 07:20 編集
2017/05/24 04:28
2017/05/24 07:19