javascript - 使视图中的动画功能更加灵活
问题描述
当滚动到视图中时,我有一些代码可以为几个数字设置动画。一切正常。但是,目前它仅适用于一组数字并绑定到一个 div(带有 id)。我想让它变得更加灵活,使其适用于超过 1 组数字。DIV id 可以是 counter1、counter2、counter3 等。
var a = 0;
$(window).scroll(function() {
var oTop = $('#counter1').offset().top - window.innerHeight;
if (a == 0 && $(window).scrollTop() > oTop) {
$('.counter-value').each(function() {
var $this = $(this),
countTo = $this.attr('data-count');
...
这是笔: https ://codepen.io/anon/pen/bQWpjJ
谢谢你的帮助!
解决方案
也许您可以通过首先使用迭代每个计数器来修改您的实现$('#counter1, #counter2').each( .. )
。
在每次迭代中,您可以通过window.scroll()
为该计数器实例设置处理程序来有效地重用现有代码。
您还将var a = 0
在迭代内部移动,以便您的代码跟踪此计数器实例的唯一滚动偏移量。
最后,您要确保'.counter-value'
为迭代的当前counter
实例选择元素:
$('#counter1, #counter2').each(function() {
var a = 0;
var counter = $(this);
$(window).scroll(function() {
var oTop = counter.offset().top - window.innerHeight;
if (a == 0 && $(window).scrollTop() > oTop) {
$('.counter-value', counter).each(function() {
var $this = $(this),
countTo = $this.attr('data-count');
$({
countNum: $this.text()
}).animate({
countNum: countTo
},
{
duration: 2000,
easing: 'swing',
step: function() {
$this.text(Math.floor(this.countNum));
},
complete: function() {
$this.text(this.countNum);
}
});
});
a = 1;
}
});
})
.spacing {
width:100%;
height: 1280px;
position:relative;
}
.counter {text-align:center}
.counter-value {display:inline-block; padding:20px 40px; margin:0 20px; border:1px solid #ddd; font-family:Arial; font-size:50px; font-weight:bold}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<div class="spacing"></div>
<div id="counter1">
<div class="counter-value" data-count="300">0</div>
<div class="counter-value" data-count="400">100</div>
<div class="counter-value" data-count="1500">200</div>
</div>
<div class="spacing"></div>
<div id="counter2">
<div class="counter-value" data-count="500">100</div>
<div class="counter-value" data-count="600">200</div>
<div class="counter-value" data-count="1700">300</div>
</div>
<div class="spacing"></div>
这是一个有效的代码笔-希望对您有所帮助!
推荐阅读
- python - 每 x 秒加载 dict 然后传递给 df 并清除 dict
- php - 如果在 DB 中找不到数据,用 php 发送什么错误代码?
- unity3d - Unity:更新 UI 文本的文本字段会在前一个字符串的顶部绘制新字符串
- r - R:为面板数据中的每个日期创建具有四分位数排名的列
- excel - VBA - 重复数据的范围选择
- javascript - Ajax 成功事件在显示 200 状态代码的网络选项卡中不起作用
- android - 图形视图 - X 轴不是实时刷新 - Android 工作室
- angularjs - 使用 Injector 类代替 ReflectiveInjector 类
- excel - Excel 问题:过滤第 1 列,在第 2 列中查找最后一个,返回值第 3 列
- android - Flutter 有状态的小部件,子级不更新状态