2015-05-07 76 views
4

我有一个问题,jQuery的animate()函数没有完成动画我的数字计数动画。动画只能从0到5000进行计数,但刷新时有时会在4999结束,其他时间在4989等。jQuery animate()没有完成动画

它正常工作的时间为80%,但刷新时的时间为20%页面动画以不同的数字结束。我究竟做错了什么?

http://jsbin.com/dobajepoti/2/(不断刷新页面,看到它)

+3

哇,这是矫枉过正。你应该用最简单的方式实现这个,就是香草javascript。像这样的东西让我相信框架正在他们的编程之旅中伤害人们。所以请切换到[vanilla-js](http://vanilla-js.com/) – Sharky

+0

Perhapes,一秒钟不足以调用commaSeparateNumber()5000次。两秒钟就会达到5000次。 – alexP

回答

2

尝试没有jQuery的:

var count = 0; 
var counter = setInterval(countUp, 1); 
var output = document.querySelector("[data-value]"); 
var max = output.getAttribute("data-value"); 

function countUp() { 
    count = count + 25; 
    if (count > max) { 
     clearInterval(counter); 
     return; 
    } 
    output.innerHTML = count; 
} 
0

的问题是,你对动画1000毫秒。根据CPU的不同,它可能在那段时间内无法计算5000次。您可以更长时间对其进行动画处理,并在符合条件时使用stop()停止动画。

5

step()功能上无法保证每个中间值被调用,而是动画(其可以由超时或通过请求next animation frame被定义)的每步骤。所以,5,000的最终值并不总是构成一个动画步骤。

为了确保它,你可以在你的每一步的功能分配给done回调:

$(thing).animate({ 
    // ... 
    step: myStepFunction, 
    done: myStepFunction 
}); 

例如http://output.jsbin.com/fagicunuye

+0

坚果,似乎jsbin是下来。我稍后再试。 – user3658991