首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clearInterval未重置

clearInterval未重置
EN

Stack Overflow用户
提问于 2019-03-24 04:56:42
回答 1查看 216关注 0票数 0

我正在尝试创建一个函数来计算来自Spotify的歌曲的时间进度,但是我被clearInterval函数卡住了。问题是计时器在我尝试重置后一直在加速。我正在使用Reactjs

第一次运行intervalToTick是1.6秒,但是如果我再次运行这个函数,它的速度是原来的两倍,并且每次重置都会变得更快(第一次工作)

我的解决方案是,因为我使用了mobX,所以将myTimer作为@observable添加到存储中,然后继续下面的回答

代码语言:javascript
复制
const ticker = function() {
  if (store.timer < 100) {
    store.addToTimer() //mobX store action to add 1+ to the store.timer
  }

};

function progress() {
  store.timer = 0
  let time = Moment()
  let songEnd = Moment().add(1, "minutes")
  const durationToFinnish = Moment.duration(songEnd.diff(time));
  const intervalToTick = 100000 / durationToFinnish.asMilliseconds()

  //Dumb to have it 2 times but cant figure of another way
  var myTimer = window.setInterval(ticker, intervalToTick * 1000);
  clearInterval(myTimer);
  myTimer = window.setInterval(ticker, intervalToTick * 1000);
}
代码语言:javascript
复制
<div className={classes.progressBar} id="progress">
  <div className={classes.innerProgressBar}>
    <span onClick={progress}>{store.timer}%</span><br></br>
  </div>
</div>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-24 05:04:43

您应该使计时器变量具有更高的作用域,以便可以从progressticker访问它,并且如果有一个已在运行的时间间隔,则需要清除该时间间隔,这样您就不能同时运行多个时间间隔:

代码语言:javascript
复制
var myTimer = null; // Declared here so it can be used in both functions

const ticker = function () {
  if(store.timer < 100){
    store.addToTimer() //mobX store action to add 1+ to the store.timer
  }      
};

function progress() {        
  store.timer = 0
  let time = Moment()
  let songEnd = Moment().add(1, "minutes")
  const durationToFinnish = Moment.duration(songEnd.diff(time));
  const intervalToTick = 100000 / durationToFinnish.asMilliseconds()  
  // Check to see if there is already a timer running
  if(myTimer){
    clearInterval(myTimer); // Stop the interval   
  }
  myTimer = setInterval(ticker, intervalToTick * 1000);    
}
代码语言:javascript
复制
<div className={classes.progressBar} id="progress">
            <div className={classes.innerProgressBar}>
                <span onClick={progress}>{store.timer}%</span><br></br>
            </div>
        </div>

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55318293

复制
相关文章

相似问题

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