如何将进度条显示为表格行背景?

时间:2013-09-01 12:46:43

标签: javascript html css ajax html-table

我有一张这样的表:

th1    th2    th3    th4    th5    th6
td1    td2    td3    td4    td5    td6
td1    td2    td3    td4    td5    td6

添加新表格行,上面有一个表单,用于运行后台进程以计算每个td中的所有数据。这个过程可能需要10-60秒。

我想要显示整个tr的背景,而不是显示进度的单独列,而不是计算过程的完成百分比。

例如:

th1    th2    th3    th4    th5    th6
$ 1    $ 2    $ 3    $ 4    $ 5    $ 6   [100% done, 100% of row shaded light green]
$ -    $ -    $ -    $ -    $ -    $ -   [ 40% done,  40% of row shaded light green]

仅限背景:

th1    th2    th3    th4    th5    th6
||||||||||||||||||||||||||||||||||||||   [100% done, 100% of row shaded light green]
|||||||||||||||                          [ 40% done,  40% of row shaded light green]
|||||||||                                [ 25% done,  25% of row shaded light green]
||||                                     [ 10% done,  10% of row shaded light green]

你推荐什么?

以下是一些常规标记:

<table>
    <thead>
        <tr><th>th1</th><th>th2</th><th>th3</th><th>th4</th><th>th5</th><th>th6</th></tr>
    </thead>
    <tbody>
        <tr data-progress="100"><td>$1</td><td>$2</td><td>$3</td><td>$4</td><td>$5</td><td>$6</td></tr>
        <tr data-progress="40"><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
        <tr data-progress="25"><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
        <tr data-progress="10"><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
    </tbody>
</table>

3 个答案:

答案 0 :(得分:10)

对于我的解决方案,您需要在每个td的第一个tr中添加一个额外的div,但它看起来很酷。仍然需要一些改进,但你明白了......

DEMO http://jsfiddle.net/CBJjv/2/

更新data-progress值后调用此函数。

var updateProgress = function () {
    var trs = document.querySelectorAll('.table-body tr');
    for (var i=0; i<trs.length; i++) {
        var tr = trs[i];
        var pr = tr.querySelector('.progress');
        pr.style.left = (tr.dataset.progress - 100)+'%';
        pr.style.height = tr.clientHeight + 'px';
    }
}

您可以使用固定位置并修改div

的宽度,而不是使用该位置

适用于Chrome,未在其他浏览器中测试过。

答案 1 :(得分:0)

我同意在tr上放置背景图像是可行的方法。但是,您需要更改tr的显示,背景百分比无法按预期方式工作。避免在背景图像位置使用%,只需使用px。您可以计算表格的宽度,获取百分比并转换为px。

td { 
    display: block; 
    background: transparent url(shade-of-grey.gif) no-repeat scroll 0 0; 
} 

答案 2 :(得分:0)

如果有人仍在寻找优雅的解决方案,您可以设置tr的样式。对于40%的进度条,我会使用:

<tr style="background-image: linear-gradient(to right,lightgrey 40%,white 40%)">

示例:https://codepen.io/drspa44/pen/rYEzWj