【发布时间】:2022-01-21 12:29:23
【问题描述】:
我有一个 section,它展示了统计数据。
- 其中一些统计数据是数字(即 145);
- 有些是数字、字符和符号(即 65K+ 或 $20.00)
- 有些只是纯文本(即“文本”)
当这部分在view 中时,我希望包含数字的统计数据要向上计数(当然,不包含数字的统计数据也不能向上计数)。
我想要达到的效果是:
- 所有
.statsBannerCard都设置为visibility: hidden - 用户滚动到部分
- JS 检查第一个
.statsBannerCard是否包含数字;如果是,则计数(这张卡现在是visibility: visible)。 - 然后在完成第一张卡片的计数器后,让第二张卡片可见并检查它是否包含数字,依此类推。
一旦前一个算牌器完成,就会显示进行中的牌。如果一张卡片只包含文字(所以我们无法数数),它只会显示卡片并继续前进。
当前问题:
在下面的演示中,我使用data-number 属性来确定卡片需要计数的数字。向下滚动时,第一个计数器有效(因为它是纯 integer),但是,当涉及字符、符号或字母时,它停止工作。
演示:
$(function() {
gsap.registerPlugin(ScrollTrigger);
$(".statsBannerCard__statistic").each(function(index, element) {
var count = $(this),
zero = {
val: 0
},
num = count.data("number"),
split = (num + "").split("."), // to cover for instances of decimals
decimals = split.length > 1 ? split[1].length : 0;
gsap.to(zero, {
val: num,
duration: 2,
scrollTrigger: element,
onUpdate: function() {
count.text(zero.val.toFixed(decimals));
}
});
});
});
.spacer{
height: 100vh;
background: lightblue;
}
.statsBanner{
background: #F283D6;
padding: 100px 0;
}
.statsBanner__intro{
margin-bottom: 60px;
}
.statsBannerCard{
/* visibility: hidden; */
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.0/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.0/ScrollTrigger.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
<section class="spacer">
Scroll down
</section>
<section class="statsBanner">
<div class="container">
<div class="row">
<div class="col-12">
<div class="statsBanner__intro text-center">
<h2>Start counter when this section is in view.</h2>
</div>
</div>
</div>
<div class="row justify-content-evenly">
<div class="col-12 col-sm-3">
<div class="statsBannerCard text-center">
<span class="statsBannerCard__statistic" data-number="145">145</span>
</div>
</div>
<div class="col-12 col-sm-3">
<div class="statsBannerCard text-center">
<span class="statsBannerCard__statistic" data-number="Text">Text</span>
</div>
</div>
<div class="col-12 col-sm-3">
<div class="statsBannerCard text-center">
<span class="statsBannerCard__statistic" data-number="$20,000">$20,000</span>
</div>
</div>
<div class="col-12 col-sm-3">
<div class="statsBannerCard text-center">
<span class="statsBannerCard__statistic" data-number="60K+">60K+</span>
</div>
</div>
</div>
</div>
</section>
【问题讨论】:
-
parseInt和parseFloat是你的朋友
标签: javascript jquery css gsap scrolltrigger