简体   繁体   English

选择不同的值时 setInterval 无法正常工作

[英]setInterval doesn't work correctly when choose different value

Please.请。 help.帮助。 How to correct the code.如何更正代码。 When you select a value and press stop, and then select another value, the value at which it stopped last time is displayed immediately, and then the countdown starts from the new value.当您 select 一个值并按停止,然后 select 另一个值时,立即显示上次停止的值,然后从新值开始倒计时。 And when there's a countdown, how to make it so that when the time runs out or when we press stop, the div, which changes the background, always initially remains green(when the value is even, it remains red at the end), ie when setInterval was done, everything looked in its original state.以及当有倒计时时,如何让它在时间用完或按下停止时,改变背景的div最初总是保持绿色(当值是偶数时,它最后保持红色),即当 setInterval 完成时,一切都在其原始 state 中查看。

 const amountOfRotation = document.querySelector('.feature-block-list'); const countdownNumbValue = document.querySelector('.countdown-numb-value'); const countdown = document.querySelector('.countdown'); const autoButton = document.querySelector('.auto-button'); const countdownTxt = document.querySelector('.countdown-txt'); const changeColor = document.querySelector('.change-color'); amountOfRotation.addEventListener('click', ({ target: { dataset } }) => { autoButton.classList.add('stop'); countdown.classList.remove('stop'); amountOfRotation.classList.add('disable-btn'); let timerId = setInterval(() => { countdownNumbValue.innerHTML = dataset.count--; changeColor.classList.toggle('red'); if (dataset.count < 0) { clearInterval(timerId); countdown.classList.add('stop'); autoButton.classList.remove('stop'); amountOfRotation.classList.remove('disable-btn'); }; }, 1500); countdownTxt.addEventListener('click', () => { clearInterval(timerId); countdown.classList.add('stop'); autoButton.classList.remove('stop'); amountOfRotation.classList.remove('disable-btn'); }) });
 .feature-block-paragraph { margin-left: 6px; }.feature-block-paragraph li { color: #ffd100; }.feature-block-paragraph ul li:hover { color: black; cursor: pointer; }.countdown-txt { color: #3d0000; cursor: pointer; }.countdown { display: flex; align-items: center; margin-left: 9%; }.countdown-numb { border: 1px solid black; border-radius: 50px; color: #ffd100; display: flex; align-items: center; justify-content: center; height: 20px; }.stop { display: none; }.disable-btn { pointer-events: none; opacity: 0.4; }.change-color { border: 1px solid black; border-radius: 100%; background: green; width: 20px; height: 20px; }.red { background: red; }
 <div class="feature-block-paragraph"> <ul class="feature-block-list"> <li class="sound-div" data-count="25">25</li> <li class="sound-div" data-count="20">20</li> <li class="sound-div" data-count="15">15</li> <li class="sound-div" data-count="10">10</li> <li class="sound-div" data-count="5">5</li> </ul> </div> <div class="auto-button"> <span class="auto-button-txt">AUTO</span> </div> <div class="countdown stop"> <div class="countdown-numb"> <span class="countdown-numb-value"></span> </div> <span class="countdown-txt">STOP</span> </div> <div class="change-color"> </div>

To fix the first problem, assign the data-count value to the DIV in the click handler, not just the interval function.要解决第一个问题,请将data-count数值分配给单击处理程序中的 DIV,而不仅仅是间隔 function。

I've also changed the code to decrement and check innerHTML rather than dataset.count .我还将代码更改为递减并检查innerHTML而不是dataset.count The way you did it you can't reuse the same count, because data-count is permanently changed by the decrement code.您执行此操作的方式不能重用相同的计数,因为减量代码会永久更改data-count

To fix the second problem, just remove the red class when the timer runs out.要解决第二个问题,只需在计时器用完时移除red class 即可。

 const amountOfRotation = document.querySelector('.feature-block-list'); const countdownNumbValue = document.querySelector('.countdown-numb-value'); const countdown = document.querySelector('.countdown'); const autoButton = document.querySelector('.auto-button'); const countdownTxt = document.querySelector('.countdown-txt'); const changeColor = document.querySelector('.change-color'); amountOfRotation.addEventListener('click', ({ target: { dataset } }) => { autoButton.classList.add('stop'); countdown.classList.remove('stop'); amountOfRotation.classList.add('disable-btn'); countdownNumbValue.innerHTML = dataset.count let timerId = setInterval(() => { countdownNumbValue.innerHTML--; changeColor.classList.toggle('red'); if (countdownNumbValue.innerHTML <= 0) { clearInterval(timerId); countdown.classList.add('stop'); autoButton.classList.remove('stop'); amountOfRotation.classList.remove('disable-btn'); changeColor.classList.remove('red'); }; }, 1500); countdownTxt.addEventListener('click', () => { clearInterval(timerId); countdown.classList.add('stop'); autoButton.classList.remove('stop'); amountOfRotation.classList.remove('disable-btn'); changeColor.classList.remove('red'); }) });
 .feature-block-paragraph { margin-left: 6px; }.feature-block-paragraph li { color: #ffd100; }.feature-block-paragraph ul li:hover { color: black; cursor: pointer; }.countdown-txt { color: #3d0000; cursor: pointer; }.countdown { display: flex; align-items: center; margin-left: 9%; }.countdown-numb { border: 1px solid black; border-radius: 50px; color: #ffd100; display: flex; align-items: center; justify-content: center; height: 20px; }.stop { display: none; }.disable-btn { pointer-events: none; opacity: 0.4; }.change-color { border: 1px solid black; border-radius: 100%; background: green; width: 20px; height: 20px; }.red { background: red; }
 <div class="feature-block-paragraph"> <ul class="feature-block-list"> <li class="sound-div" data-count="25">25</li> <li class="sound-div" data-count="20">20</li> <li class="sound-div" data-count="15">15</li> <li class="sound-div" data-count="10">10</li> <li class="sound-div" data-count="5">5</li> </ul> </div> <div class="auto-button"> <span class="auto-button-txt">AUTO</span> </div> <div class="countdown stop"> <div class="countdown-numb"> <span class="countdown-numb-value"></span> </div> <span class="countdown-txt">STOP</span> </div> <div class="change-color"> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM