###実現したい事
下記のサイトを参考にスクロールアニメーションを実装しました。
あるスクロールして要素が表示されると、アニメーション付きで表示されます。
https://firstlayout.net/css-animation-of-images/
参考サイトのようにうまく実装はできたのですが、指定したclass全てに適用となり、
eachで繰り返しているそのclassを保有する全ての要素に対しアニメーションが発生してしまいます。
おそらく、thisなどを使い、そのクラスのthis(その要素)に対しという支持が必要かと思いますが、js部分でどのようにすれば良いか把握できずにいます。
###コード
view
1<div class="main"> 2 <% @articles.each do |article| %> 3 <div class="index-left"> 4 <div class="article-img"> 5 <%= image_tag article.image_name.thumb.url %> 6 <h2><%= article.title %></h2> 7 </div> 8 </div> 9 <% end %> 10</div>
js
1$(document).on('turbolinks:load',function() { 2 const image = document.querySelectorAll('.index-left'); 3 const observer = new IntersectionObserver(function(entries) { 4 entries.forEach(function(entry) { 5 if (entry.intersectionRatio > 0) { 6 entry.target.classList.add('img-animation'); 7 } else { 8 entry.target.classList.remove('img-animation'); 9 } 10 }); 11 }); 12 Array.prototype.forEach.call(image, function(img) { 13 observer.observe(img); 14 }); 15})();
css
1.article-img { 2 animation: img-opacity 2s cubic-bezier(.4, 0, .2, 1); 3 overflow: hidden; 4 position: relative; 5} 6 7.article-img:before { 8 animation: img-animation 2s cubic-bezier(.4, 0, .2, 1) forwards; 9 background: #fff; 10 bottom: 0; 11 content: ''; 12 left: 0; 13 pointer-events: none; 14 position: absolute; 15 right: 0; 16 top: 0; 17 z-index: 1; 18} 19@keyframes img-opacity { 20 0% { 21 opacity: 0; 22 } 23} 24@keyframes img-animation { 25 100% { 26 transform: translateX(100%); 27 } 28}
お分かりの方いましたらご教示お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/22 06:48
退会済みユーザー
2020/04/22 07:38
2020/04/24 10:55
退会済みユーザー
2020/04/24 10:58