标题是自我解释我只希望能够在元素滚动到页面时启动计数动画,而不是在页面加载时动画。我尝试使用$(window).scroll(function()但是如果元素位于屏幕的顶部和底部之间,则无法使用if语句触发动画。
HTML:
<div class="sectiontitle">
<h2>Projects statistics</h2>
<span class="headerLine"></span>
</div>
<div id="projectFacts" class="sectionClass">
<div class="fullWidth eight columns">
<div class="projectFactsWrap ">
<div class="item wow fadeInUpBig animated animated" data-number="12" style="visibility: visible;">
<i class="fa fa-briefcase"></i>
<p id="number1" class="number">12</p>
<span></span>
<p>Projects done</p>
</div>
<div class="item wow fadeInUpBig animated animated" data-number="55" style="visibility: visible;">
<i class="fa fa-smile-o"></i>
<p id="number2" class="number">55</p>
<span></span>
<p>Happy clients</p>
</div>
<div class="item wow fadeInUpBig animated animated" data-number="359" style="visibility: visible;">
<i class="fa fa-coffee"></i>
<p id="number3" class="number">359</p>
<span></span>
<p>Cups of coffee</p>
</div>
<div class="item wow fadeInUpBig animated animated" data-number="246" style="visibility: visible;">
<i class="fa fa-camera"></i>
<p id="number4" class="number">246</p>
<span></span>
<p>Photos taken</p>
</div>
</div>
</div>
</div>
CSS:
.sectionClass {
padding: 20px 0px 50px 0px;
position: relative;
display: block;
}
.fullWidth {
width: 100% !important;
display: table;
float: none;
padding: 0;
min-height: 1px;
height: 100%;
position: relative;
line-height: 50px;
}
.sectiontitle {
background-position: center;
margin: 30px 0 0px;
text-align: center;
min-height: 20px;
}
.sectiontitle h2 {
font-size: 30px;
color: #222;
margin-bottom: 0px;
padding-right: 10px;
padding-left: 10px;
}
.headerLine {
width: 160px;
height: 2px;
display: inline-block;
background: #101F2E;
}
.projectFactsWrap{
display: flex;
margin-top: 30px;
flex-direction: row;
flex-wrap: wrap;
}
#projectFacts .fullWidth{
padding: 50 !important;
}
.projectFactsWrap .item{
width: 25%;
height: 100%;
padding: 50px 0px;
text-align: center;
}
.projectFactsWrap .item:nth-child(1){
background: rgb(16, 31, 46);
}
.projectFactsWrap .item:nth-child(2){
background: rgb(18, 34, 51);
}
.projectFactsWrap .item:nth-child(3){
background: rgb(21, 38, 56);
}
.projectFactsWrap .item:nth-child(4){
background: rgb(23, 44, 66);
}
.projectFactsWrap .item p.number{
font-size: 40px;
padding: 0;
font-weight: bold;
}
.projectFactsWrap .item p{
color: rgba(255, 255, 255, 0.8);
font-size: 18px;
margin: 0;
padding: 10px;
font-family: 'Open Sans';
}
.projectFactsWrap .item span{
width: 60px;
background: rgba(255, 255, 255, 0.8);
height: 2px;
display: block;
margin: 0 auto;
}
.projectFactsWrap .item i{
vertical-align: middle;
font-size: 50px;
color: rgba(255, 255, 255, 0.8);
}
.projectFactsWrap .item:hover i, .projectFactsWrap .item:hover p{
color: white;
}
.projectFactsWrap .item:hover span{
background: white;
}
@media (max-width: 786px){
.projectFactsWrap .item {
flex: 0 0 50%;
}
}
.trans{
opacity: 1;
-webkit-transform: translateX(0px);
transform: translateX(0px);
-webkit-transition: all 500ms ease;
-moz-transition: all 500ms ease;
transition: all 500ms ease;
}
JQuery的:
<script>
$.fn.jQuerySimpleCounter = function( options ) {
var settings = $.extend({
start: 0,
end: 100,
easing: 'swing',
duration: 400,
complete: ''
}, options );
var thisElement = $(this);
$({count: settings.start}).animate({count: settings.end}, {
duration: settings.duration,
easing: settings.easing,
step: function() {
var mathCount = Math.ceil(this.count);
thisElement.text(mathCount);
},
complete: settings.complete
});
};
$('#number1').jQuerySimpleCounter({end: 12,duration: 3000});
$('#number2').jQuerySimpleCounter({end: 55,duration: 3000});
$('#number3').jQuerySimpleCounter({end: 359,duration: 2000});
$('#number4').jQuerySimpleCounter({end: 246,duration: 2500});
</script>
答案 0 :(得分:1)
选中JSFiddle。
添加两个条件,以避免每次scroll
发生时重置动画。
var animated = false;
$(window).scroll(function(){
var scroll = $(window).scrollTop();
if(scroll > 0 && !animated){
$('#number1').jQuerySimpleCounter({end: 12,duration: 3000});
$('#number2').jQuerySimpleCounter({end: 55,duration: 3000});
$('#number3').jQuerySimpleCounter({end: 359,duration: 2000});
$('#number4').jQuerySimpleCounter({end: 246,duration: 2500});
animated = true;
}
});
答案 1 :(得分:1)
检查链接CodePen
var executed = true;
$(window).scroll(function () {
var $mainElement = $('#projectFacts'),
windowScroll = $(window).scrollTop(),
mainContainer = $mainElement.position().top;
if (windowScroll > mainContainer && executed) {
$('#number1').jQuerySimpleCounter({end: 12, duration: 3000});
$('#number2').jQuerySimpleCounter({end: 55, duration: 3000});
$('#number3').jQuerySimpleCounter({end: 359, duration: 2000});
$('#number4').jQuerySimpleCounter({end: 246, duration: 2500});
executed = false;
}
});