こんにちは。JS初心者なので質問させていただきます。
ワードプレスで写真家のウェブサイトを制作していて、各プロジェクトの記事には写真が複数枚あり、各プロジェクトごとに写真の合計数は変わります。
ページのデザインは、余白を使って写真をランダムにグリッドで並べるデザインです。
***実現したい事***
スクロールして写真がビューポート内に入るとカウントを1足していき、次の写真がビューポート内に入ると2と表示されていく機能を実装したいです。例)01(カウント)/20(合計数), 02/20, 03/20, 04/20
記事に登録されている写真の合計数は取得できました。
そして各写真をターゲット要素にして、それぞれの要素のトップの高さも取得できましたが、この後どのようなコードを書いていいのかわからず手が止まっている状態です。。。
ロジックやご指摘、アドバイスなどをいただけると幸いです。
よろしくお願いします。!
***追記***
2枚目の写真と説明を加えます。右端の01/20はfixedなのでスクロールしても固定されてついていきます。
img2の20ー40%くらいが画面内に入ったらカウントは”2”。
さらにスクロールをして、img3の20ー40%くらいが画面内に入ったらカウントは”3”
このようなイメージでカウントをしていきたいと思っています。
もし一番下までスクロールしてimgがもうない場合(合計数に達した場合)は、カウントは止まります。
下から上にスクロールした場合(上に戻る、逆スクロール)は、カウント数は減らしたいです。例)06/20、05/20、04/20、03/20、02/20,,,
実装したいイメージと近い記事を見つけました。Intersection Observer
<!--single-post.php--> <?php if ($portfolioGallery) : ?> <div class="picture__counter"> <div class="counter__inner"> <span class="count">01 / </span> // ここにスクロールして要素がビューポートに入るたびに1ずつカウント足される <span class="total_num"> <?php echo count($portfolioGallery); ?> </span> // 合計数を取得 <a href="#container__top"> <span class="arrow__top"></span> </a> </div> </div> <?php endif; ?> </div> <div class="project__photos"> <?php if ($portfolioGallery) : ?> <?php foreach ($portfolioGallery as $index => $img) : ?> <?php if (in_array(($index % 10), [0, 3, 6, 9])) : ?> <?php endif; ?> <div class="photo <?php echo 'gallery__image--' . ($index % 10) . ' ' . $size; ?>"> <?php $size = ($img['width'] / $img['height'] > 1) ? 'about_landscape' : 'about_portrait'; echo wp_get_attachment_image($img['ID'], $size, false, ['class' => 'gallery__image--' . ($index % 10) . ' ' . $size]); ?> </div> <?php endforeach; ?> <?php endif; ?> </div>
/* main.js */ let countTarget = $('.photo'); // ターゲット要素 let countNum = $('.count'); // カウント表示 0, 1, 2, 3, 4, 5,,,, 合計数までカウントする let totalNum = $('.total_num').text(); // 合計数 => 13, 20, 10 etc... $(countTarget).each(function (index, ele) { let targetContentsTop = $(ele).offset().top; console.log(targetContentsTop); // 各要素のトップの高さも取得 -> 946.91650390625,,, // console.log(`index is ${index + 1}`); // 後でこのインデックス番号を変数countに追加して書き換えたい // let arr = []; // arr.push(ele) // console.log(arr) // Array [ div.photo.gallery__image--0 ],,, })
回答2件
あなたの回答
tips
プレビュー