当前位置: 首页 > 面试题库 >

React中的倒数计时器

管和志
2023-03-14
问题内容

我已经在JavaScript中看到了许多倒数计时器,并希望在React中使用它。

我借用了我在网上找到的此功能:

secondsToTime(secs){
    let hours = Math.floor(secs / (60 * 60));

    let divisor_for_minutes = secs % (60 * 60);
    let minutes = Math.floor(divisor_for_minutes / 60);

    let divisor_for_seconds = divisor_for_minutes % 60;
    let seconds = Math.ceil(divisor_for_seconds);

    let obj = {
        "h": hours,
        "m": minutes,
        "s": seconds
    };
    return obj;
  };

然后我自己写了这段代码

  initiateTimer = () => {
    let timeLeftVar = this.secondsToTime(60);
    this.setState({ timeLeft: timeLeftVar })
  };

  startTimer = () => {
    let interval = setInterval(this.timer, 1000);
    this.setState({ interval: interval });
  };

  timer = () => {
    if (this.state.timeLeft >0){
      this.setState({ timeLeft: this.state.timeLeft -1 });
    }
    else {
      clearInterval(this.state.interval);
      //this.postToSlack();
    }
  };

当前onclick会将其在屏幕上的时间设置为:Time Remaining: 1 m : 0 s 但不会将其减少到Time Remaining: 0 m : 59 s,然后Time Remaining: 0 m : 58 s等等等

我想我需要使用其他参数再次调用该函数。我该怎么做呢?

编辑:我忘了说,我想要功能,这样我就可以使用秒到分钟和秒


问题答案:

您必须setState每秒剩余几秒钟(每次调用间隔)。这是一个例子:

class Example extends React.Component {

  constructor() {

    super();

    this.state = { time: {}, seconds: 5 };

    this.timer = 0;

    this.startTimer = this.startTimer.bind(this);

    this.countDown = this.countDown.bind(this);

  }



  secondsToTime(secs){

    let hours = Math.floor(secs / (60 * 60));



    let divisor_for_minutes = secs % (60 * 60);

    let minutes = Math.floor(divisor_for_minutes / 60);



    let divisor_for_seconds = divisor_for_minutes % 60;

    let seconds = Math.ceil(divisor_for_seconds);



    let obj = {

      "h": hours,

      "m": minutes,

      "s": seconds

    };

    return obj;

  }



  componentDidMount() {

    let timeLeftVar = this.secondsToTime(this.state.seconds);

    this.setState({ time: timeLeftVar });

  }



  startTimer() {

    if (this.timer == 0 && this.state.seconds > 0) {

      this.timer = setInterval(this.countDown, 1000);

    }

  }



  countDown() {

    // Remove one second, set state so a re-render happens.

    let seconds = this.state.seconds - 1;

    this.setState({

      time: this.secondsToTime(seconds),

      seconds: seconds,

    });



    // Check if we're at zero.

    if (seconds == 0) {

      clearInterval(this.timer);

    }

  }



  render() {

    return(

      <div>

        <button onClick={this.startTimer}>Start</button>

        m: {this.state.time.m} s: {this.state.time.s}

      </div>

    );

  }

}



ReactDOM.render(<Example/>, document.getElementById('View'));


<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id="View"></div>


 类似资料:
  • 本文向大家介绍React注册倒计时功能的实现,包括了React注册倒计时功能的实现的使用技巧和注意事项,需要的朋友参考一下 一、React版本 16.4.1 二、具体代码如下 设置state属性 2.倒计时 3.jsx代码 明明很简单的,但是看网上有的代码搞得很复杂一样,当然也可以用react相关插件,不过我觉得这样更简洁。 ps:react 获取服务器端时间倒计时 以上就是本文的全部内容,希望对

  • 所以我用Java创建了一个手机应用程序,上面有一个简单的计时器,从0秒开始到50秒。我如何让这个计时器从50秒开始到0秒。就像一个倒数计时器。请帮帮忙。 }

  • 我正在尝试在两个日期之间创建倒计时,但时间过了一段时间就落后了。 我的PHP后端返回当前时间和未来X时间之间的差值,例如当前时间和提前2小时。这个差异在类,格式如下,我使用javascript函数对差异进行倒计时。以下是我的功能: 代码按预期工作,但几分钟后,比方说2-3分钟,如果您刷新页面或在新窗口中打开它,您将看到倒计时计时器落后秒/分钟。有人知道我做错了什么吗?

  • 问题内容: 我正在创建一个需要ListView的应用程序,其中的元素数量不确定,每个元素都有一个从可变数量开始倒数的计时器。我能够成功地使 其中 之一倒计时,但是我不知道如何在ListView的每个元素中包括一个计时器。 我目前正在使用CountDownTimer(如果从网站复制,请确保将D大写,因为它们有误)。 任何向我指出正确方向的代码或资源都将受到赞赏。 这是我当前的EventAdapter

  • 定义一个接受1个参数的count_down函数。当你调用count_down(3)时,输出应该是这样的:3...2...1...0!。 我的代码如下: 但是输出是[3,2,1,0][4,3,2,1,0]如何获得如所讨论的格式所描述的格式:3...2...1...0!

  • 问题内容: 只是想问问如何创建最简单的倒数计时器。 该网站上会有一句话: “注册将在05:00分钟后关闭!” 因此,我想做的是创建一个简单的js倒数计时器,该计时器从“ 05:00”到“ 00:00”,然后在结束时重置为“ 05:00”。 之前我一直在回答一些问题,但是对于我想做的事情,它们似乎都太过激烈了(日期对象等)。 问题答案: 我有两个演示,一个带演示,一个不带演示。两者都不使用日期函数,