Webcourse/06-前端基本功:CSS和DOM练习/08-JavaScript基础:定时器.md
2019-10-01 20:25:16 +08:00

4.5 KiB
Raw Blame History

定时器的常见方法

  • setInterval():循环定时器。周而复始的执行(循环执行)

  • setTimeout():定时炸弹。用完以后立刻报废(只执行一次)

定义定时器的方式

**方式一:**匿名函数

每间隔一秒打印一次:

   setInterval(function () {
       console.log(1);
   },1000);

方式二:

每间隔一秒打印一次:

    setInterval(fn,1000);

    function fn(){
        console.log(1);
    }

定时器高级:清除定时器

定时器的返回值可以用来清除定时器。具体方法是假设定时器setInterval()的返回值是参数1,那么clearInterval(参数1)就可以清除定时器。

setTimeout()的道理是一样的。

代码举例:

<script>
    var num = 1;

    var timer = setInterval(function () {
        console.log(num);  //每间隔一秒打印一次num的值
        num ++;
        if(num ===5) {  //打印四次之后,就清除定时器
            clearInterval(timer);
        }

    }, 1000);
</script>

定时器举例

举例一5秒后关闭网页两侧的广告栏

假设网页两侧的广告栏为两个img标签它们的样式为

<style>
    ...
    ...

</style>

5秒后关闭广告栏的js代码为

    <script>
        window.onload = function () {
            //获取相关元素
            var imgArr = document.getElementsByTagName("img");
            //设置定时器5秒后关闭两侧的广告栏
            setTimeout(fn,5000);
            function fn(){
                imgArr[0].style.display = "none";
                imgArr[1].style.display = "none";
            }
        }
    </script>

举例二:关闭京东顶部广告栏(带动画效果关闭)

我们在之前的文章中做过这道题。但是现在,要求广告栏在关闭的时候,带动画效果:点击关闭按钮后,顶部广告栏慢慢地变透明,直到全部关闭。

我们可以用定时器来做。完整版代码如下:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        .top-banner {
            background-color: pink;
            height: 80px;
        }

        .w {
            width: 1210px;
            margin: 10px auto;
            position: relative;
        }

        img {
            display: block;
            width: 1210px;
            height: 80px;
            background-color: blue;
        }

        a {
            position: absolute;
            top: 5px;
            right: 5px;
            color: #fff;
            background-color: #000;
            text-decoration: none;
            width: 20px;
            height: 20px;
            font: 700 14px/20px "simsum";
            text-align: center;
        }

        .hide {
            display: none !important;
        }

        .search {
            width: 1210px;
            height: 80px;
            background-color: green;
            margin: 0 auto;
        }
    </style>
</head>
<body>
<div class="top-banner" id="topBanner" style="opacity: 1">
    <div class="w">
        <img src="blue" alt=""/>
        <a href="#" id="closeBanner">×</a>
    </div>
</div>
<div class="search">

</div>

<script>
    //需求点击关闭按钮先让top-banner这个盒子透明度变为0紧接着displaynone;

    //1.获取事件源和相关元素
    var closeBanner = document.getElementById("closeBanner");
    var topBanner = document.getElementById("topBanner");
    //定义定时器
    var timer = null;
    //2.绑定事件
    closeBanner.onclick = function () {
        //3.书写事件驱动程序定时器透明度变为0清除定时器并隐藏盒子
        timer = setInterval(function () {
            topBanner.style.opacity -= 0.1;
            if (topBanner.style.opacity < 0) {
                topBanner.style.display = "none";
                clearInterval(timer);
            }
        }, 50);
    }
</script>
</body>
</html>

代码解释:

注意我们要实现给顶部的div加一个行内样式style="opacity: 1",然后才能通过定时器判断topBanner.style.opacity的值。

定时器的返回值其实是number类型的但我们习惯性地设置初始值为null。

实现效果: