該当の要素までスクロールすると青い帯のようなものが横からにゅーっと出てくるアニメーションを実装させたいのですが、同じクラス名で指定しているためか最初のアニメーションが実行されると、下にある同じクラスの要素もスクロールを待たずに一緒に実行されてしまいます。
cssで.one_post
というクラスが縦にいくつも並んでいて、アニメーションはその中のnth-of-type(4n+1)
ずつ、それぞれスクロールするごとに動作させることになっています。
<script> jQuery(function(){ let blue_band = $('.one_post:nth-of-type(4n+1)'); let blue_top = blue_band.offset().top; let blueBand = "blueBand_"; // 疑似要素のスタイルをまるっと指定する let blue_css = ` .one_post:nth-of-type(4n+1)::before{ position: absolute; content: ""; display: inline-block; background: #6CA5E8 repeat-x; border-radius: 128px 0 0 128px; top: 0; width: 100%; height: 256px; z-index: 1; animation: slideIn 1.5s ease-in-out forwards; } @keyframes slideIn { 0%{ transform: translateX(95vw); opacity: 1; } 100%{ transform: translateX(2vw); opacity: 1; } }`; // styleタグにblue_cssの記述をセットする let style = $('<style>'); style.text(blue_css); $(window).scroll(function(){ for(let i = 1; i <= blue_band.length; i++){ let b_subject = blue_band.attr("id", blueBand+i); let scroll = $(window).scrollTop(); let windowHeight = $(window).height(); let b_top = b_subject.scrollTop(); if(scroll >= b_top - windowHeight){ $('body').append(style); } } }); });
最初、eachで試して一緒に実行されてしまったので、次に上記のfor文でidにそれぞれの数字を加えてみたのですが、結局同じ数字になってしまってアニメーションもやはり同じタイミングで動作してしまいました。
本当ならblue_band.attr("id", blueBand+i);
のところをblue_band[i].attr("id", blueBand+i);
としたかったのですが、「 TypeError: blue_band[i].attr is not a function 」とエラーになってしまったので、今は[i]を外しています。
こういったjqueryの個別の処理に対して、詰まることが多いように実感しております。
どうかお力をいただきたく、何卒宜しくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/08 03:51
2022/08/08 04:16 編集
2022/08/08 04:39
2022/08/08 04:44