我试图让下面的数字计数器只启动一次滚动到,然后让它循环5秒或10秒,请协助。我试过用:
$( '#yourdiv').scroll(function() {
if ( $(this)[0].scrollHeight - $(this).scrollTop() <= $(this).outerHeight()){因为卷轴的功能,但没有运气。请查看下面的代码。
const counterAnim = (qSelector, start = 0, end, duration = 8000) => {
const target = document.querySelector(qSelector);
let startTimestamp = null;
const step = (timestamp) => {
if (!startTimestamp) startTimestamp = timestamp;
const progress = Math.min((timestamp - startTimestamp) / duration, 1);
target.innerText = Math.floor(progress * (end - start) + start);
if (progress < 1) {
window.requestAnimationFrame(step);
}
};
window.requestAnimationFrame(step);
};
//#endregion - end of - number counter animation
document.addEventListener("DOMContentLoaded", () => {
counterAnim("#count1", 0, 10000,8000);
counterAnim("#count2", 0, 40, 8000);
counterAnim("#count3", 0, 5, 8000);
});<div class="ohio-heading-sc heading text-left" id="ohio-custom-61aa36a52809a">
<h2 class="title"><span id="count1" class="display-4"></span>+ </h2>
<p class="subtitle">lorem ipsum</p>
</div>
<div class="ohio-heading-sc heading text-left" id="ohio-custom-61aa36a52809a">
<h2 class="title"><span id="count2" class="display-4"></span>+ YEARS</h2>
<p class="subtitle">lorem ipsum</p>
</div>
<div class="ohio-heading-sc heading text-left" id="ohio-custom-61aa36a52809a">
<h2 class="title"><span id="count3" class="display-4"></span> YEAR</h2>
<p class="subtitle">lorem ipsum</p>
</div>
发布于 2021-12-20 10:35:07
mentioned.
DOMContentLoaded中调用
counterAnim,根据您的if条件调用它一个布尔变量,以确定计数器是否已经到达视图端口一次,因为用户可以一直滚动页面,但您只希望启动间隔一次。
const counterAnim = (qSelector, start = 0, end, duration = 8000) => {
const target = document.querySelector(qSelector);
let startTimestamp = null;
const step = (timestamp) => {
if (!startTimestamp) startTimestamp = timestamp;
const progress = Math.min((timestamp - startTimestamp) / duration, 1);
target.innerText = Math.floor(progress * (end - start) + start);
if (progress < 1) {
window.requestAnimationFrame(step);
}
};
window.requestAnimationFrame(step);
};
const animateTexts = () => {
counterAnim("#count1", 0, 10000, 8000);
counterAnim("#count2", 0, 40, 8000);
counterAnim("#count3", 0, 5, 8000);
}
let initiatedInterval = false;
$('#yourdiv').scroll(function() {
if ($(this)[0].scrollHeight - $(this).scrollTop() <= $(this).outerHeight()) {
animateTexts();
if (!initiatedInterval) {
initiatedInterval = true;
// 8,000 - animation time + 10,000 - delay
setInterval(animateTexts, 18_000);
}
}
});body {
margin: 0;
}
#yourdiv {
height: 100vh;
background: red;
overflow: auto;
}<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="yourdiv">
<div style="height: 500px;">Placeholder with 500px height, please scroll</div>
<div class="ohio-heading-sc heading text-left" id="ohio-custom-61aa36a52809a">
<h2 class="title"><span id="count1" class="display-4"></span>+ </h2>
<p class="subtitle">lorem ipsum</p>
</div>
<div class="ohio-heading-sc heading text-left" id="ohio-custom-61aa36a52809a">
<h2 class="title"><span id="count2" class="display-4"></span>+ YEARS</h2>
<p class="subtitle">lorem ipsum</p>
</div>
<div class="ohio-heading-sc heading text-left" id="ohio-custom-61aa36a52809a">
<h2 class="title"><span id="count3" class="display-4"></span> YEAR</h2>
<p class="subtitle">lorem ipsum</p>
</div>
</div>
我鼓励您深入阅读,了解我发布的代码片段,而不仅仅是复制/粘贴它们。
https://stackoverflow.com/questions/70418509
复制相似问题