你如何为jQuery UI进度条设置animation值?
我已经设置了一个jQuery UI进度条,但不能使用jQueryanimation来为其设置animation值。 任何想法如何使这项工作?
percentDone
variables包含一个从0到100的数字,表示滚动条应该有多远(这个工作正常)。
我尝试了几个不同的东西,无济于事。 以下是我到目前为止:
var progressbar = $("#progressbar1").widget(); progressbar.animate({ value: percentDone }, 5000, function() { console.debug('done animating'); });
请注意,如果我使用“值”方法更新滚动条,它可以正常工作,但是会跳转到该值,而不是平滑地进行animation:
$("#progressbar1").progressbar('value', percentDone);
- DEMO 1:第一个,概念certificate
$(function() { var pGress = setInterval(function() { var pVal = $('#progressbar').progressbar('option', 'value'); var pCnt = !isNaN(pVal) ? (pVal + 1) : 1; if (pCnt > 100) { clearInterval(pGress); } else { $('#progressbar').progressbar({value: pCnt}); } },10); });
- DEMO 2:为了好的缘故,改编@ Peter的回应;-)。
$(function() { $('#progressbar').progressbar(); // inizializa progressbar widget $pVal = $('.ui-progressbar-value').addClass('ui-corner-right'); var pGress = setInterval(function() { //generate our endless loop var pCnt = $pVal.width(); // get width as int // generate a random number between our max 100 and it's half 50, // this is optional, and make the bar move back and forth before // we reach the end. var rDom = Math.floor(Math.random() * (100 - 50 + 1) + 50); var step = rDom >= 100 ? 100: rDom; // reached our max ? reset step. doAnim(step); },1000); var doAnim = function(wD) { // complete easing list http://jqueryui.com/demos/effect/easing.html $pVal.stop(true).animate({width: wD + '%'},1000, 'easeOutBounce'); if (wD >= 100) clearInterval(pGress) /* run callbacks here */ } });
在一个真实的应用程序中,你可能不需要生成一个循环,例如,在上传文件时,你的Flash应用程序会告诉你文件大小,并告诉你什么时候达到了所需的最大值,所以我的第一个代码是为了演示只是使用进度条setter和getter,当然还有什么使整个事情发挥作用,例如循环; 第二个是与糖相同的概念的适应。
animation与CSS3
使用CSS3,不需要使用JavaScript来直接pipe理进度条的值。 只要添加到你的风格:
.ui-progressbar-value { transition: width 0.5s; -webkit-transition: width 0.5s; }
你可以学习更多关于CSS3转换 。
下面是如何让它顺利地进行animation制作,而不是在@aSeptik当前接受的答案中提出的有点不快的方式。 它绕过.progressbar('value, ...)
方法。
// On load, make the progressbar inside always have round edges: // (This makes it look right when 100%, and seems nicer all the time to me.) $("#progressbar .ui-progressbar-value").addClass("ui-corner-right"); new_width = "50px"; // you will need to calculate the necessary width yourself. $("#progressbar .ui-progressbar-value").animate({width: new_width}, 'slow')
jquery论坛上的一个很好的解决scheme
http://forum.jquery.com/topic/smooth-progressbar-animation
进度条应该初始化,让我们说0.1工作
$("#progressbar .ui-progressbar-value").animate( { width: "67%" }, {queue: false});
写这个插件/方法很容易使任何进度条animation,并为我工作得很好,所以我希望它也适用于其他人。
(function( $ ) { $.fn.animate_progressbar = function(value,duration,easing,complete) { if (value == null)value = 0; if (duration == null)duration = 1000; if (easing == null)easing = 'swing'; if (complete == null)complete = function(){}; var progress = this.find('.ui-progressbar-value'); progress.stop(true).animate({ width: value + '%' },duration,easing,function(){ if(value>=99.5){ progress.addClass('ui-corner-right'); } else { progress.removeClass('ui-corner-right'); } complete(); }); } })( jQuery );
只要将该代码添加到您网页的顶部,并将其作为一个元素使用即可
$('#progressbar').animate_progressbar(value [, duration] [, easing] [, complete] );
编辑:
这是一个缩小版本的代码,加载速度更快。
(function(a){a.fn.animate_progressbar=function(d,e,f,b){if(d==null){d=0}if(e==null){e=1000}if(f==null){f="swing"}if(b==null){b=function(){}}var c=this.find(".ui-progressbar-value");c.stop(true).animate({width:d+"%"},e,f,function(){if(d>=99.5){c.addClass("ui-corner-right")}else{c.removeClass("ui-corner-right")}b()})}})(jQuery);
这是一个优雅的解决scheme: 增长JQuery进度条
$(function() { $("#progressbar").progressbar({ value: 1 }); $("#progressbar > .ui-progressbar-value").animate({ width: "37%" }, 500); });
以下脚本不只是animation进度条,还会逐步增加/减less显示的%值
// 'width' can be any number $('#progressbar .ui-progressbar-value').animate( { width: width + '%' }, { duration: 3000, step: function (now, fx) { $('.leftvalue').html(parseInt(now) + '%'); $('.rightvalue').html((100 - parseInt(now)) + '%'); } });
你可以用简单的本地html5进度来做到这一点。
HTML:
<progress id="score-progress-bar" value="10" max="100"></progress>
JS:
$('#score-progress-bar').animate({value: your_value_from_0_to_100}, {duration: time_in_ms, complete: function(){console.log('done!');}});