js中常用的两种定时器

303 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

setTimeout()(炸弹:只执行一次)

setTimeout() 的调用函数我们也称为回调函数 callback,定时器到期后执行

开启定时器:setTimeout(调用函数, [延迟的毫秒数]);

如果延迟的毫秒数省略,默认取 0,意味着马上执行

停止定时器:clearTimeout(timeoutID)

定时器可能有很多,所以我们经常给定时器赋值一个标识符,该标识符(timeoutID)是一个正整数

小案例:实现文字打字机效果

image.png

  1. 将需要展示的文本切割成一个个单个字符;
  2. 定义一个加入文字容器中的文字索引(index),根据这个索引使用定时器setTimeout()方法向文字容器中追加文字;
  3. 可以使用::after伪元素和CSS3动画属性(animation)实现文字输入的光标闪烁的效果
const content = document.querySelector('.content');
const words = '不管我们几岁了,儿童节那天都请对自己说一句“嘿,儿童节快乐!”。';
//split() 方法使用指定的分隔符字符串将字符串转化为字符串数组,如果分隔符为空字符串,则将原字符串中每个字符的以数组形式返回
const wordsArray = words.split('');
let index = 0;
function typewriter(){
  if (index < wordsArray.length){
    content.innerHTML += wordsArray[index];
    index++;
    setTimeout(typewriter,300)
  }
}
typewriter()

setInterval() (闹钟:重复执行)

setInterval() 方法重复调用一个函数,每隔一个规定的时间间隔,就去调用一次

开启定时器:setInterval(回调函数, [间隔的毫秒数]);

如果间隔的毫秒数省略,默认取0,必须是毫秒,表示每隔多少毫秒就自动调用这个函数。

停止定时器: clearInterval(intervalID);

intervalID是setInterval()建立的定时器的标识符,是一个非零数值

小案例:获取验证码倒计时

image.png

  1. 点击获取验证码按钮,首先需要判断手机号是否填写及是否正确;
  2. 设置一个倒计时60s,使用定时器setInterval()方法让倒计时每隔1秒,自减;如果倒计时等于0,就清除定时器;
  3. 获取验证码按钮使用的button标签,使用disabled属性控制按钮是否禁用
codeBtn.addEventListener('click', function () {
  if (!checkRequired([phone])) {
    checkTel(phone);
    codeBtn.disabled = true;
    let seconds = 60;
    let intervalID = setInterval(() => {
      seconds--;
      if (seconds !== 0) {
        codeBtn.innerHTML = seconds + "s后重发";
      } else {
        clearInterval(intervalID)
        codeBtn.innerHTML = "发送验证码";
        codeBtn.disabled = false;
      }
    }, 1000);
  }
})