在这种特殊情况下,一个过程中有 9 个自动化步骤需要不同的时间长度。我们目前在进度条的中心有一个显示百分比的数字,但它遇到了常见的走走停停问题,最高可达 33%,等待很长时间,最高可达 55%,等待更长时间,然后整理。
向用户展示此内容的最佳方式是什么?我们应该删除数字,删除整个进度条以支持 ajax 类型的圆形动画,为九个步骤添加描述性文本并检查它们还是保持原样?你怎么认为?
在这种特殊情况下,一个过程中有 9 个自动化步骤需要不同的时间长度。我们目前在进度条的中心有一个显示百分比的数字,但它遇到了常见的走走停停问题,最高可达 33%,等待很长时间,最高可达 55%,等待更长时间,然后整理。
向用户展示此内容的最佳方式是什么?我们应该删除数字,删除整个进度条以支持 ajax 类型的圆形动画,为九个步骤添加描述性文本并检查它们还是保持原样?你怎么认为?
如果真的需要很长时间,AJAX 类型的动画可能不是一个好主意。我会选择物品清单。
进度条用于向用户保证正在发生的事情。如果您没有更详细的步骤列表,我建议您“伪造”它们。
一个基本的解决方案是运行一个计时器并缓慢增加进度,将其限制在下一个逻辑步长值。如果这些步骤花费的时间差异很大,您可以手动调整每个计时器“滴答”的增量值,具体取决于您所处的步骤。
然而,一个更好的解决方案(我曾经以这种方式实现过,但我无法发布代码:)),将是随着步骤的继续缓慢减少增量 - 所以它永远不会完全进入下一步。然后下一步到了,你有一个很好的跳跃,循环重复。
在某些情况下,进度条指示正在发生的事情比准确和流畅更重要。当进度条停止前进时,用户往往会感到恐慌。
如果您在一段时间内遇到栏冻结的问题,最好用通用动画替换它,以向用户保证正在发生的事情,而不必担心显示过程有多远。或者,保留进度条,但添加一些额外的动画作为安慰剂。
为了扩展 Cadet Pirx 的答案,这里有一些 WinForms C# 代码。你需要一个新的UserControl
. 在其上放置一个ProgressBar
控件,称为inner
. 添加以下代码:
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%,完成。步长值始终相同,但由于步长的大小不明显,所以它起作用了..