在这种特殊情况下,流程中有9个自动化步骤,需要不同的时间长度。我们目前在进度条的中心有一个显示百分比的数字,但它遇到了常见的走走停停的问题,即比赛高达33%,等待很长时间,比赛高达55%,等待更长时间,然后完成。
向用户展示这一点的最佳方式是什么?我们应该删除数字,删除整个进度条以支持ajax类型的圆形动画,为九个步骤添加描述性文本并将其勾掉,还是保持原样?你有什么想法?
如果真的需要很长时间,AJAX类型的动画可能不是一个好主意。我会选择项目清单。
进度条可以让用户放心正在发生什么。如果你没有更详细的步骤列表,我建议你"伪造"它们。
一个基本的解决方案是运行一个计时器,慢慢增加进度,将其限制在下一个逻辑步长值。如果步骤所花费的时间非常不同,您可以根据所处的步骤手动调整每个计时器"滴答"的增量值。
然而,一个更好的解决方案(我曾经用这种方式实现过,但我不能发布代码:)是随着步骤的继续慢慢减少delta,这样它就永远不会进入下一步。然后下一步到了,你跳得很好,循环重复。
在某些情况下,进度条指示正在发生的事情比准确和平滑更重要。当进度条停止前进时,用户往往会感到恐慌。
如果进度条冻结一段时间有问题,最好用一个通用动画来代替它,让用户放心正在发生什么事情,而不用担心显示过程的进展。或者,保留进度条,但添加一些额外的动画作为安慰剂。
要扩展Cadet Pirx的答案,下面是一些WinForms C#代码。你需要一个新的UserControl
。在其上放置一个名为inner
的ProgressBar
控件。添加以下代码:
public partial class ZenoProgressBar : UserControl
{
private const int DEFAULT_FACTOR_VALUE = 10;
private const int DEFAULT_MAXIMUM_VALUE = 100;
public ZenoProgressBar()
{
InitializeComponent();
Maximum = DEFAULT_MAXIMUM_VALUE;
Factor = DEFAULT_FACTOR_VALUE;
}
/// <summary>
/// The "speed" of the progress bar. While it will never get to
/// the end, it uses this number to decide how much further to
/// go each time Increment is called. For example, setting it to
/// 2 causes half of the remaining distance to be covered.
/// </summary>
[DefaultValue(DEFAULT_FACTOR_VALUE)]
public int Factor { get; set; }
[DefaultValue(DEFAULT_MAXIMUM_VALUE)]
public int Maximum { get; set; }
private void ZenoProgressBar_Load(object sender, EventArgs e)
{
inner.Dock = DockStyle.Fill;
}
public void Increment()
{
inner.Value += (inner.Maximum - inner.Value) / Factor;
}
}
我遇到了几乎完全相同的问题。我们还有9步,所以酒吧会走11%、22%、33%等,而且有些步骤比其他步骤要长。
我决定把较长的两步算作两步,所以我们有11步,所以这并不明显,跳跃也不总是均匀的:9%、18%、36%、45%、54%、72%、81%、90%,完成了。步长值总是相同的,但由于步长的大小不明显,所以它起作用了。。