【JavaScript】定时器

定时器

1. 定时器分类
  • 延迟定时器
    • 语法 setTimeout(function(){}, 毫秒数)
    • 作用 隔一段时间之后执行
  • 间隔定时器
    • 语法 setInterval(function(){}, 毫秒数)
    • 作用 每隔一段时间执行一次
// 1. 延迟定时器
    setTimeout(function () {
      console.log("执行了。。。");
    }, 2000);

  // 2. 间隔定时器
    setInterval(function () {
      console.log("执行了...");
    }, 2000);
2. 定时器的返回值
  • 返回值 数字
  • 作用 用来关闭定时器
// 定时器的返回值
  var t1 = setTimeout(function () {
    console.log("执行了延迟定时器");
  }, 1000);


  var t2 = setInterval(function () {
    console.log("执行了间隔定时器");
  }, 1000);


  console.log(t1, "t1");
  console.log(t2, "t2");
3. 关闭定时器

语法

  • clearTimeout(定时器)
  • clearInterval(定时器)
<body>
  <button id="btn">关闭</button>
</body>
<script>

 // 关闭定时器
  var t1 = setTimeout(function () {
    console.log("执行了延迟定时器");
  }, 1000);

  var t2 = setInterval(function () {
    console.log("执行了间隔定时器");
  }, 1000);

  btn.onclick = function () {
    // 关闭定时器
    // clearTimeout(t1);
    // clearTimeout(t2);
    clearInterval(t1);
    clearInterval(t2);
  };

</script>
案例一:页面时钟
/* 要求:
   在页面上展示一个时钟 隔1s更新一次
   效果:
   xx年xx月xx日 星期x xx:xx:xx
 */

  // 封装一个函数, 数字是一位数的时候,前面补0
  function format(num) {
    return num > 10 ? num : "0" + num;
  }

  function dateStr() {
    var str = "";

    // 获取日期
    var date = new Date();
    // 解析 获取每一个部分
    var year = date.getFullYear();
    var month = date.getMonth() + 1;
    var day = date.getDate();

    var week = date.getDay();

    var weekStr = "日一二三四五六";
    week = "星期" + weekStr[week];

    var h = date.getHours();
    var m = date.getMinutes();
    var s = date.getSeconds();

    str = `${year}${month}${day}${week}  ${format(h)}:${format(
      m
    )}:${format(s)}`;

    return str;
  }

  box.innerHTML = dateStr();

  setInterval(function () {
    box.innerHTML = dateStr();
  }, 1000);
案例二:倒计时
    /*
    设置未来时间  1.14 
    距离 1. 14还有  x日x时x分x秒
	分析:
    时间戳相减
    */
/* 

function countDay() {
  var str = "";

  var futureTime = new Date("2023/1/14");
  var currentTime = new Date();

  var time = parseInt((futureTime - currentTime) / 1000);

  var day = parseInt(time / (24 * 60 * 60));
  var h = parseInt((time % (24 * 60 * 60)) / (60 * 60));
  var m = parseInt((time % (60 * 60)) / 60);
  var s = time % 60;

  // str = `${day}天${h}时${m}分${s}秒`;
  str = day + "天" + h + "时" + m + "分" + s + "秒";
  return str;
}

box.innerHTML = countDay();

setInterval(function () {
  box.innerHTML = countDay();
}, 1000);
案例三:抽奖案例
<style>
  div {
    width: 500px;
    height: 100px;
    border: 5px solid red;
    margin: 50px auto;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 50px;
  }
  body {
    text-align: center;
  }
</style>
<body>
  <div id="box">开始抽奖</div>
  <button id="start">开始</button>
  <button id="end">结束</button>
</body>
<script>
var arr = [
"谢谢惠顾",
"再来一次",
"身体健康",
"试卷一套",
"想屁吃",
"彩票一张",
"沙县小吃",
"劳斯莱斯五元优惠券",
"别墅一套",
"袜子一双",
"霸王洗发水",
];

// 需求 点击 box开始抽奖 再次点击停止抽奖
// 开始抽奖 ---- 不断的从arr中随机产生一项,放到box中

// 1. 定时器
// 2. 生成一个随机数  0 ~ 9
// 3. 放到box box.innerHTML

// 生成随机数
function randNum(min, max) {
return Math.round(Math.random() * (max - min) + min);
}

var flag = false; // 当前抽奖的状态
var t = null; // 准备一个变量 ,接受定时器结果

box.onclick = function () {
if (!flag) {
// 开始抽奖
t = setInterval(function () {
// 生成一个0 ~ 9的随机数
var num = randNum(0, 9);
var text = arr[num];
box.innerHTML = text;
}, 200);
// 把抽奖的状态改成正在抽奖
flag = true;
} else {
// 停止抽奖 做的是什么事情
flag = false;
clearInterval(t);
}
};
  </script>
案例四:抽奖案例按钮版
<style>
      div {
        width: 500px;
        height: 100px;
        border: 5px solid red;
        margin: 50px auto;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 50px;
      }
      body {
        text-align: center;
      }
</style>

  <body>
    <div id="box">开始抽奖</div>
    <button id="start">开始</button>
    <button id="end">结束</button>
  </body>
<script>
  var arr = [
    "谢谢惠顾",
    "再来一次",
    "身体健康",
    "试卷一套",
    "想屁吃",
    "彩票一张",
    "沙县小吃",
    "劳斯莱斯五元优惠券",
    "别墅一套",
    "袜子一双",
    "霸王洗发水",
  ];


  // 点击开始按钮 开始抽奖
  // 点击结束按钮 结束抽奖


  var t = null; // 用来接受 定时器的结果


  // 生成随机数
  function randNum(min, max) {
    return Math.round(Math.random() * (max - min) + min);
  }


  start.onclick = function () {
    // 根据t判断是否应该生成一个定时器


    if (t) {
      return;
    }
    t = setInterval(function () {
      // 生成一个0 ~ 9的随机数
      var num = randNum(0, 9);
      var text = arr[num];
      box.innerHTML = text;
    }, 200);
  };
  end.onclick = function () {
    clearInterval(t);
    t = null;
  };
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芒果Cake

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值