jQuery animate() - 通过缓动取得进展
jQuery animate() - get progress with easing
目前,我正在使用此代码为条形图式元素制作动画:
$('.anim').animate({
right: `${100-(e/max*100)}%`,
backgroundColor: colors[0]
},{
duration: 1500,
easing: 'easeInQuart',
progress: function(animation, progress, msRemaining) {
console.log(100 * progress + "%");
document.getElementById('progress').innerText = Math.round(e * progress);
}
});
(jsfiddle)
其中 e
是条形图的值,max
是总条形图比例。
元素 progress
应该显示条形图的值随着它的增加而增加。
但是,由于我使用的是 'easeInQuart'
,条形图的数字进度实际上并不是它的视觉状态。
这是一个 slowed down example,您可以在其中清楚地看到进度文本以恒定速率递增,但动画条以缓动方式填充。
Is there a way to get the progress, factoring in the exponential growth of 'easeInQuart'
?
另外:我可能会改变缓动风格,所以我希望解决方案具有适应性。
要获取 "eased" 值而不是 progress
回调,请使用 step
回调并检查其 now
参数。
在这种情况下,由于动画属性的 none 为您提供了您想要的值,您可以为自定义 属性 设置动画,这 jQuery 变得非常简单。
var e = 3210;
var max = 4504;
var colors = ['#28ad8a'];
$('.anim').css({
'val': 0 // custom property: start value
}).animate({
'right': `${100-(e/max*100)}%`,
'val': e, // custom property: final value:
'backgroundColor': colors[0]
}, {
'duration': 1500,
'easing': 'easeInQuart',
'step': function(now, tween, msRemaining) {
if (tween.prop === 'val') { // this callback is called once per property per step, therefore filter out all but the property of interest, 'val'
$('#progress').text(Math.round(now));
}
}
});
目前,我正在使用此代码为条形图式元素制作动画:
$('.anim').animate({
right: `${100-(e/max*100)}%`,
backgroundColor: colors[0]
},{
duration: 1500,
easing: 'easeInQuart',
progress: function(animation, progress, msRemaining) {
console.log(100 * progress + "%");
document.getElementById('progress').innerText = Math.round(e * progress);
}
});
(jsfiddle)
其中 e
是条形图的值,max
是总条形图比例。
元素 progress
应该显示条形图的值随着它的增加而增加。
但是,由于我使用的是 'easeInQuart'
,条形图的数字进度实际上并不是它的视觉状态。
这是一个 slowed down example,您可以在其中清楚地看到进度文本以恒定速率递增,但动画条以缓动方式填充。
Is there a way to get the progress, factoring in the exponential growth of
'easeInQuart'
?
另外:我可能会改变缓动风格,所以我希望解决方案具有适应性。
要获取 "eased" 值而不是 progress
回调,请使用 step
回调并检查其 now
参数。
在这种情况下,由于动画属性的 none 为您提供了您想要的值,您可以为自定义 属性 设置动画,这 jQuery 变得非常简单。
var e = 3210;
var max = 4504;
var colors = ['#28ad8a'];
$('.anim').css({
'val': 0 // custom property: start value
}).animate({
'right': `${100-(e/max*100)}%`,
'val': e, // custom property: final value:
'backgroundColor': colors[0]
}, {
'duration': 1500,
'easing': 'easeInQuart',
'step': function(now, tween, msRemaining) {
if (tween.prop === 'val') { // this callback is called once per property per step, therefore filter out all but the property of interest, 'val'
$('#progress').text(Math.round(now));
}
}
});