$(function () { const observer = new IntersectionObserver(setAnimate, { threshold: [0.5, 1], rootMargin: '-125px 0px 0px 0px', }); document.querySelectorAll('.observe').forEach((x) => { observer.observe(x); }); }); function addNumber(start, end, speed, timer, id) { let o = document.querySelector(id); let i = start; let Interval; if (i < end) { Interval = setInterval(function () { i += speed; // 设置每次增加的动态数字,可调整 if (i > end) { clearInterval(Interval); // 清除setInterval的time,这个方法w3c可具体查看文档 o.innerHTML = end.toLocaleString(); // 此赋值是为了避免最后一次增加过后的数据和真实数据不同 i = 0; } else { o.innerHTML = i.toLocaleString(); } }, timer); // 数据跳转的速度控制 } } function setAnimate(entry) { entry.forEach((x) => { const { target, isIntersecting } = x; const obj = $(target); if (obj.find('.animate__fadeInUp').length > 0 || !isIntersecting) return; if (obj.find('.mapNumc').length > 0) { obj.find('.mapNumc').addClass('animate__fadeInUp'); addNumber(0, 40, 1, 50, '.mapNumc'); addNumber(0, 100, 1, 25, '.mapNumy'); addNumber(0, 90000, 1000, 30, '.mapNumj'); } else { obj.find('.animate__animated').each((i, e) => { setTimeout(() => { $(e).addClass('animate__fadeInUp'); }, 100 * i); }); } }); }