clearInterval为什么无效?

play(state,event){
  const playerBar=document.getElementById("playerBar");
  const eve=event.target;
  let duraTime=playerBar.duration;
  let duraMinute=Math.floor(duraTime/60)+":"+(duraTime%60/100).toFixed(2).slice(-2);
  let currentTime=playerBar.currentTime;
  let currentMinute=Math.floor(currentTime/60)+":"+(currentTime%60/100).toFixed(2).slice(-2);
  let ctime;
  if(playerBar.paused){
    playerBar.play();
    eve.innerHTML="pause";
    state.audio.duration=duraMinute;
    state.audio.currentTime=currentMinute;
    ctime=setInterval(
      function(){
        duraTime--;
        currentTime++;
        duraMinute=Math.floor(duraTime/60)+":"+(duraTime%60/100).toFixed(2).slice(-2);
        currentMinute=Math.floor(currentTime/60)+":"+(currentTime%60/100).toFixed(2).slice(-2);
        state.audio.duration=duraMinute;
        state.audio.currentTime=currentMinute;
     },1000
    )
  }else{
    playerBar.pause();
    eve.innerHTML="play_arrow";
    clearInterval(ctime);
  }
}

play()绑定的是一个播放器的开关,,点击一次时间会动,用的是定时器setInterval,再次点击清除计时器,时间暂停,用了clearInterval,但是目前clearInterval失效,不知道什么原因,拜托大神帮看看!!

阅读 19.4k
3 个回答

每次,执行play函数的时候,let ctime,导致ctime并不是之前 setInterval返回的值。

你可以在clearInterval(ctime)前执行 console.log(ctime),将会打印出 undefined

所以,一个方法,是将ctime的定义放在 play函数之外,这样每次执行便不会初始化ctime。

另一个方法,保存在state中,即需要保证执行 clearInterval时,ctime是之前 setInterval返回的值。

每一次 play 函数执行的时候, 你的 ctime 都是从新定义的,你就永远清除不了

可能是时间搓是个局部变量,函数结束之后就直接丢了。
你试试保存在全局里面。(猜测)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏