我该如何使这个动画触发滚动?

问题描述:

我有这方面的工作JS提琴:http://jsfiddle.net/4v2wK/我该如何使这个动画触发滚动?

// Animate the element's value from x to y: 
$({someValue: 40000}).animate({someValue: 45000}, { 
    duration: 3000, 
    easing:'swing', // can be anything 
    step: function() { // called on every step 
     // Update the element's text with rounded-up value: 
     $('#el').text(commaSeparateNumber(Math.round(this.someValue))); 
    } 
}); 

function commaSeparateNumber(val){ 
    while (/(\d+)(\d{3})/.test(val.toString())){ 
     val = val.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"); 
    } 
    return val; 
} 

现在我想修改它,以便当用户通过DIV滚动,不一定盘旋在它它时才会触发,但在div中可见他或她的屏幕。说这个div在一个长页面的底部,当用户到达那里时,动画结束了,他们错过了整个节目。

+0

你可以使用inview(https://github.com/protonet/jquery.inview)或写一些你自己的东西。检查vieport的大小,改变它的大小,并检查滚动位置,然后你知道该元素是否在视图 – caramba 2014-08-30 20:24:35

+0

,所以你希望当用户到达目标(div)时开始倒计时?或者只要用户达到目标就想让计数开始和结束? – ProllyGeek 2014-08-31 00:33:26

+0

我希望当它们到达那里时开始,它的结局并不重要,但是开始的时候。谢谢! – 2014-09-01 03:05:04

这段代码会在您的div顶部超过250px时触发动画。

isScrolledIntoView(); 
$(window).scroll(function() { 
    isScrolledIntoView(); 
}); 
function isScrolledIntoView(){ 
    $('.class').each(function(){ // add the class of the divs you want trigger on scroll over 
     var $this = $(this).attr("id"); 
     var docViewTop = $(window).scrollTop(); 
     var docViewBottom = docViewTop + $(window).height(); 

     var elemTop = $(this).offset().top; 
     var elemBottom = elemTop + $(this).height(); 

     if ((elemTop >= docViewTop) && (((docViewBottom-250) >= elemTop))){ 
      // trigger your animation here 
      // with $this as a selector 
     } 
    })