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失效,不知道什么原因,拜托大神帮看看!!
每次,执行play函数的时候,
let ctime
,导致ctime并不是之前 setInterval返回的值。你可以在
clearInterval(ctime)
前执行console.log(ctime)
,将会打印出 undefined所以,一个方法,是将ctime的定义放在 play函数之外,这样每次执行便不会初始化ctime。
另一个方法,保存在state中,即需要保证执行
clearInterval
时,ctime是之前setInterval
返回的值。