如何正确使用的setTimeout?

问题描述 投票:3回答:1

我一直在试图正确地使用setTimeOut,但一直没能弄明白。

Expected Output:

如果你点击任何按钮,横幅滑入视图,在8秒之后它会消失。

点击其他地方的页面和横幅消失。

这8秒计时器结束和一个新的8应该开始前点击相同的按钮。

Actual output:

如果你点击任何按钮旗帜将滑入视图,在8秒之后它会消失。

点击页面上的任何地方,所以旗帜消失。

点击8秒计时器结束之前相同的按钮,而不是开始一个新的8秒的旗帜将玩完第一次点击的剩余秒钟,然后消失。

以下是我已经尝试,也是一个codesandbox:[链接] https://codesandbox.io/s/n7zvwn11yj

const getGreetingBanner =(e)=>{
  let query = document.querySelector(e)
      query.style.right = '8px';

    let timer = setTimeout(() => {
        query.style.right = '-165px';
    }, 8000);

   clearTimeOut(timer)
}

document.addEventListener('click', (e) => { 
  let triggeredElement = e.target.className;
    if (triggeredElement === 'container') {
            document.querySelectorAll('.banishBanner').forEach(function(x) {
        x.style.right = '-180px';
      })
    }
})

HTML:


<div class="container">
    <button  onclick="getGreetingBanner('.thankyou')" type="button" class="accept">Accept</button>
    <button  onclick="getGreetingBanner('.comeBackSoon')" type="button" class="cancel">Cancel</button>
    <div class="banishBanner thankyou">Thank You!</div>
   <div class="banishBanner comeBackSoon">Come back soon.</div>
</div>

javascript html css dom
1个回答
4
投票

当你在同一个按钮再次单击您必须清除超时。

var timeout;
const getGreetingBanner =(e)=>{
  let query = document.querySelector(e)
      query.style.right = '8px';
    //clearing timeout
    clearTimeout( timeout );

    timeout = setTimeout(() => {
        query.style.right = '-165px';
    }, 8000);
}
© www.soinside.com 2019 - 2024. All rights reserved.