显示倒计时进度条

时间:2014-07-02 12:17:59

标签: jquery css

我在this site上看到了这个进度条形码。

我想做的是,倒计时3分钟,并显示剩下多少分钟和秒。所以,而不是显示百分比,我想显示剩余时间。

我使用以下代码:

JS

progress(100, $('#progressBar')); // This is what the timer should update each second

function progress(percent, $element) {
    var progressBarWidth = percent * $element.width() / 100;
    $element.find('div').animate({ width: progressBarWidth }, 500).html(percent + " minutes/seconds to go");
};

HTML

<div id="progressBar">
  <div></div>
</div>

CSS

 #progressBar {
  width: 923px;
  margin: 10px auto;
  height: 22px;
  background-color: #0A5F44;
}

#progressBar div {
  height: 100%;
  text-align: right;
  padding: 0 10px;
  line-height: 22px; /* same as #progressBar height if we want text middle aligned */
  width: 0;
  background-color: #CBEA00;
}

1 个答案:

答案 0 :(得分:17)

您需要更改此功能:

  • 使用3个参数(timelefttimetotalelement)代替2个实际
  • 每秒使用setTimeout()刷新进度条
  • 检查timeleft以了解您是否需要来刷新进度条
function progress(timeleft, timetotal, $element) {
    var progressBarWidth = timeleft * $element.width() / timetotal;
    $element
        .find('div')
        .animate({ width: progressBarWidth }, 500)
        .html(timeleft + " seconds to go");
    if(timeleft > 0) {
        setTimeout(function() {
            progress(timeleft - 1, timetotal, $element);
        }, 1000);
    }
};

progress(180, 180, $('#progressBar'));

另外,您应该添加此CSS,以避免进度条溢出其容器:

#progressBar div {
  box-sizing: border-box;
}

JSFiddle

<强> [提示]

如果您希望进度条平稳且不断减少,请改用此代码:

.animate({ width: progressBarWidth }, timeleft == timetotal ? 0 : 1000, "linear")

JSFiddle