【发布时间】:2018-05-04 04:20:57
【问题描述】:
我想要一个进度条,它是一个多条。看起来像这样:
[----------][----50% ][ ]
[---20% ][ ][ ]
[----------][-----------][---80% ]
它具有三个不同的部分,RED-GREEN-RED:
[ RED RED ][GREEN GREEN][ RED RED]
是实时的,值来自远程json api, 如果该值在绿色区域内,则一切正常,否则 同事需要采取的行动(如果它在所需区域之下或之上)。
到目前为止,我实现了 html+css,在 Firefox 和 Chrome 中运行良好。 这是 jsfiddle 上的演示项目:
- 20% - https://jsfiddle.net/jws0jh6w/1/
- 50% - https://jsfiddle.net/0458cbgw/1/
- 80% - https://jsfiddle.net/4cLa8kra/
现在我需要“反应”代码,才能活着:)
问题是,我不能内联样式以下 CSS 规则:
progress[value]::-webkit-progress-value { /* Chrome */
background-image:
-webkit-linear-gradient(
135deg,
transparent 33%,
rgba(0, 0, 0, 0.1) 33%,
rgba(0, 0, 0, 0.1) 66%,
transparent 66%
),
-webkit-linear-gradient(
top,
rgba(255, 255, 255, 0.25),
rgba(0, 0, 0, 0.25)
),
-webkit-linear-gradient(
left,
rgba(255,0,0,0.8),
rgba(255,0,0,0.8) 37.5%,
rgba(0,255,0,0.8) 37.5%,
rgba(0,255,0,0.8) 87.5%,
rgba(255,0,0,0.8) 87.5%
);
}
反应后的 Progressbar.js 相当简单:
const Progressbar = ({percent, min, max}) => {
let styleProgress = { backgroundImage:
`linear-gradient(
90deg,
rgba(255,0,0,0.1),
rgba(255,0,0,0.1) ${min}%,
rgba(0,255,0,0.1) ${min}%,
rgba(0,255,0,0.1) ${max}%,
rgba(255,0,0,0.1) ${max}%)`
};
return(
<div className="wrapper-progressbar">
<progress style={styleProgress} max="100" value={percent}>
</progress>
</div>
);
};
我可以设置微弱的背景(因此最小值和最大值始终可见),但不能设置实际的进度条。
有人知道如何使用 React 制作动态 CSS 选择器吗?
ps:只需要 Chrome 和 Firefox 支持,因为它最终会成为控制室中的电视(Kiosk 模式)。
所以根本不需要 IE 支持。
html5 <progress> 元素将是正确的解决方案恕我直言。
更新:这是一个演示反应项目: https://jsfiddle.net/ave0x0nb/3/
进度条要么是单色(红色 0-30%),有两种颜色(红色 0-30%,绿色 30-70%),要么是三色(红色 0-30%,绿色 30-70%,红色70-100%) 取决于实际值。 因此,如果值为 50%,则它有两种颜色(0-30% 红色和 30-50% 绿色)。
现在的问题(以及因此的问题),它总是三色的(上面的反应演示项目),并且不尊重背景进度条的限制。 请参阅 20%、50%、80% jsfiddle 演示项目以供参考。
【问题讨论】:
-
您是否尝试过在您的 className 属性中使用函数?或者,在其中一个生命周期函数中,将属性分配给函数的响应。例如,
componentWillUpdate() { this.setState({ color: this.getColor([nextProps]) }}https://stackoverflow.com/questions/34011322/call-function-inside-of-classname-react-js -
进度条组件通过 props 接收值。它工作正常(它在 ComponentDidMount 中触发,并更新 react redux 状态)。还有一个数字显示(用于实际值),效果很好。 (一个简单的 react 组件,带有一个巨大的
<span>元素。 -
在我看来 value 属性应该只是一个 props 或 state 值。例如 value={this.props.value}
标签: javascript css reactjs