前提・実現したいこと
ウェブページで画面に入ったら数字をカウントアップさせるコードを書きたいのですが、アニメーションがスタートしません。
まず、カウントアップ自体は実現することが出来たのですが、それが画面の中に入ったときに発動する方法がわかりません。
カウントアップ自体は「.count」というクラスで操作しているのですが、画面に「.counted」が入ったとき「.count」を追加するというコードを書きました。
「.count」自体は正常に追加されているのですがカウントアップが始まりません。
発動条件に「.countが追加せれた時点で発動する」という条件を付けなければならないのか?と思い色々と試したのですが、javascriptはほぼ未経験のため分かりませんでした。お力添えを頂ければ幸いです、、、
発生している問題・エラーメッセージ
・「.count」が追加されてもアニメーションが始まらない
該当のソースコード
jQuery
1// 数時間とアップ 2$(function(){ 3 var countElm = $('.count'), 4 countSpeed = 10; 5 6 countElm.each(function(){ 7 var self = $(this), 8 countMax = self.attr('data-num'), 9 thisCount = self.text(), 10 countTimer; 11 12 function timer(){ 13 countTimer = setInterval(function(){ 14 var countNext = thisCount++; 15 self.text(countNext); 16 17 if(countNext == countMax){ 18 clearInterval(countTimer); 19 } 20 },countSpeed); 21 } 22 timer(); 23 }); 24});
JavaScript
1// 画面内に入ったらcountをクラスに追加 2var boxes = document.querySelectorAll(".counted"); 3var boxesArray = Array.prototype.slice.call(boxes, 0); 4var options = { 5 root: null, 6 rootMargin: "0px 50%", 7 threshold: 0, 8}; 9var observer = new IntersectionObserver(doWhenIntersect, options); 10boxesArray.forEach(function (box) { 11 observer.observe(box); 12}); 13 14function doWhenIntersect(entries) { 15 var entriesArray = Array.prototype.slice.call(entries, 0); 16 entriesArray.forEach(function (entry) { 17 if (entry.isIntersecting) { 18 entry.target.classList.add("count"); 19 } 20 }); 21}
html
1<!DOCTYPE html> 2<html Lang="ja"> 3<!-- Meta --> 4<meta charset="UTF-8"> 5<title>テンプレート</title> 6<!-- Script --> 7<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 8rel="stylesheet"> 9<link href="static/css/bootstrap.min.css" rel="stylesheet"> 10<link href="static/css/style.css" rel="stylesheet"> 11<link href="static/css/style_sp.css" rel="stylesheet"> 12<script src="static/js/bootstrap.min.js"></script> 13<script src="static/js/main.js"></script> 14</head> 15<body> 16<div class="count-sec"> 17 <div class="container"> 18 <div class="item-data"> 19 <span class="counted" data-num="100">0</span>万円 20 </div> 21 </div> 22</div> 23</body> 24 25
試したこと
参考にしたサイト一覧はこちらです。
■jQueryで数字をカウントアップしながら表示する方法
http://black-flag.net/jquery/20161108-6221.html
■スクロールアニメーションを実現!Intersection Observer APIの使い方
https://hsmt-web.com/blog/js-intersection-observer/
補足情報(FW/ツールのバージョンなど)
回答3件
あなたの回答
tips
プレビュー