首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用时间数据制作进度条?

如何使用时间数据制作进度条?
EN

Stack Overflow用户
提问于 2019-10-17 02:47:38
回答 2查看 522关注 0票数 0

我想做一个进度条,这个值将是一个动作的开始和结束之间的时间。就像示例(我从下午1点开始到下午3点),我想做一些类似的事情,看看两个小时之间的进展。

我从一个具有随机值的简单进度栏开始:

代码语言:javascript
运行
复制
import React from 'react';
import './ProgressBar.css'

const ProgressBar = ({width, progressColor}) => (
  <div>
    <div className="meter" style={{background: progressColor}}>
      <span style={{width: width +'%', background: progressColor}} className="progress"/>
    </div>
  </div>
);

export default ProgressBar

代码语言:javascript
运行
复制
import React, {Component} from 'react';
import './index.css';
import ProgressBar from "./ProgressBar";
import Clock from 'react-live-clock';

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      width: 20,
      clock: ''
    }
  }

  render() {
    return (
      <div>
        <div className="">
          <ProgressBar width={this.state.width} progressColor={"#1725b5"}/>
        </div>
      </div>
    )
  }
}

现在,我正在寻找价值​​随着时间的推移。

EN

Stack Overflow用户

回答已采纳

发布于 2019-10-17 03:33:05

我就是这样做的:

  1. ProgressBar成为一个哑组件。它只需要知道呈现
  2. 的进度,App是一个智能组件,它知道startend值,并根据当前时间跟踪progress (计算要提供给
  3. 的值)。

我在这里用了几分钟而不是几个小时,这样演示起来就更容易了。更新startendgetProgress以满足您的需求。

代码语言:javascript
运行
复制
const ProgressBar = ({status, progressColor}) => (
  <div style={{background: '#fff', border: '1px solid #000', overflow: 'hidden'}}>
    <div style={{transform: `scaleX(${status})`, transformOrigin: '0 0', transition: 'transform 1s', height: 10, background: progressColor}} />
  </div>
);

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      progress: this.getProgress(),
    }
  }
  
  getProgress() {
    const {start, end} = this.props;
    const now = new Date().valueOf();
    return (now - start) / (end - start);
  }
  
  componentDidMount() {
    this.interval = setInterval(() => {
      const progress = this.getProgress();
      if (progress > 1) {
        clearInterval(this.interval);
      }
      this.setState({
        progress
      });
    }, 1000);
  }

  render() {
    return (
      <div>
        <div>
          <ProgressBar status={this.state.progress} progressColor={"#1725b5"}/>
        </div>
      </div>
    )
  }
}

const now = new Date().valueOf();
const start = Math.floor(now / 60000) * 60000; // current minute
const end = start + 60000; // start + 1 minute
ReactDOM.render(
  <App start={start} end={end} />,
  document.getElementById('app')
);
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="app" />

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58424166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档