day09:定时器

总结:

1.三种解绑事件

事件源.on事件类型 = null
事件源.removeEventListenner(“没有on的事件类型”,命名函数,false)
事件源.detachEvent(“没有on的事件类型”,命名函数)

2.事件冒泡

一定是盒子嵌套盒子,如果里面的盒子做了点击事件,外面的盒子和里面的盒子有相同的点击事件,外面的盒子也会触发----冒泡
满足条件:盒子嵌套,有相同事件

3.阻止事件冒泡

event.stopPropagation() event可以简写e,默认的事件对象—火狐和谷歌
window.event.cancelBubble = true 给ie低版本浏览器

4.事件委托(事件代理)

通俗一点就是事件冒泡的应用,就是自己的事不想干,叫它爸爸,甚至爷爷、甚至祖先来干。或者拿取快递来比喻都行

有三个同事预计会在周一收到快递。为签收快递,有两种办法:一是三个人在公司门口等快递;二是委托给前台MM代为签收。现实当中,我们大都采用委托的方案(公司也不会容忍那么多员工站在门口就为了等快递)。前台MM收到快递后,她会判断收件人是谁,然后按照收件人的要求签收,甚至代为付款。

5.事件的三个阶段

1、事件捕获:用数字代表是1(如果你看到了是数字1就是代表了捕获)— 从外到里
2、目标阶段:用数字代表是2(如果你看到了数字2就是目标阶段)—执行当前的元素
3、冒泡阶段:用数字代表是3(如果你看到了数字3就代表的是冒泡阶段)–从里到外

e.eventPhase 为了检测事件的三个阶段分别代表什么数字

一、最大的匿名函数

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        window.onload = function () {
        //最大的匿名函数--也就是我们的入口函数,当页面加载完毕之后再执行里面的代码
        //(当页面加载的时候就是相当于先把body里面的内容都执行完毕了,再执行我们的JS)
            var btn = document.getElementById("btn");
            btn.onclick = function () {
                console.log("大家今天继续给力,优秀,棒棒哒.");
            }
        }
    </script>
</head>

<body>
    <input type="button" value="按钮" id="btn">
</body>

</html>

二、定时器setInterval

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="button" value="清除定时器" id="btn">
    <script>
        /* 
        定时器:炸弹,闹钟(炸弹只炸一次)
        我们的定时器有两种:setInterval 和 setTimeout
        setInterval 使用场景轮播图效果  原子弹--不停的炸,--不停的执行下去,如果这个定时器不清除,他会一直执行。
        setTimeout -----  会用在一次性的广告里面--现在很少见---炸弹

        第一、setInterval(匿名函数,时间)
        参数1:是一个匿名函数
        参数2:时间 单位是毫秒 1000毫秒--- 1秒  千分之一为单位
        */
       var timeId = setInterval(function(){
           alert("嘎嘎,来点我呀");
       },2000);//2000代表2秒 就是2s

      //清除定时器
      var btn = document.getElementById("btn");
      //点击按钮来清除定时器
      btn.onclick = function(){
        //   window.clearInterval(timeId); 我们把前面的定时器给了timeId
        // 扩展--工作里面推荐下面写法
        clearInterval(timeId);
        // 总结:清除定时器 window 是可以省略的,这个定时器是我们用的最多的
      }
    
    </script>
</body>
</html>

三、一起摇摆案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            position: absolute;
            /* 运动起来一定要有定位 */
        }
        img{
            width: 200px;
            height: 200px;
        }
    </style>
</head>
<body>
    <input type="button" value="一起摇摆" id="btn1">
    <input type="button" value="停止摇摆" id="btn2">
    <div id="dv">
        <img src="images/1.jpg" alt="">
        <img src="images/2.jpg" alt="">
    </div>
    <script src="publick.js"></script>
    <script>
        var timeId = "";//全局变量
        my$("btn1").onclick = function(){
            timeId = setInterval(function(){
                // 定义一个随机数
                var x = parseInt(Math.random() *100 + 1);
                var y = parseInt(Math.random() *100 + 1);
                // 设置元素的left属性和top属性
                my$("dv").style.left = x + "px";
                my$("dv").style.top = y + "px";
            },10);//时间越小越快
        };

        // 停止定时器,清除定时器
        my$("btn2").onclick = function(){
            clearInterval(timeId);
        }

        // 现在不要去点击多次,点击多次会有bug的-----我们后面详细画图来讲解如何解决这个bug--轮播图的时候。
    </script>
</body>
</html>

四、亮起来案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 600px;
            height: 600px;
            border: 1px solid #000;
            background: black;
            position: relative;/*相对定位*/
        }
        span{
            position: absolute;/*绝对定位*/
            font-size: 50px;
            color:yellow
        }
    </style>
</head>
<body>
    <input type="button" value="亮起来" id="btn">
    <div id="dv"></div>
    <script src="publick.js"></script>
    <script>
        my$("btn").onclick = function(){
            // 因为我们这个定时器没有做清除,所以没有给变量接收
            setInterval(function(){
                my$("dv").innerHTML = "<span>☆</span>";
                // 随机数
                var x = parseInt(Math.random() * 600 + 1);
                var y = parseInt(Math.random() * 600 + 1);
                my$("dv").firstElementChild.style.left = x + "px";
                my$("dv").firstElementChild.style.top = y + "px";
            },5);
        }
    </script>
</body>
</html>

五、美女时钟效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <img src="" alt="" id="im">
    <script src="publick.js"></script>
    <script>
        setInterval(function(){
            // 获取系统的日期时间
            var dt = new Date();
            // console.log(dt);
            // 获取小时
            var hour = dt.getHours();
            // 获取秒钟
            var second = dt.getSeconds();
            // 判断长度----三元运算符
            hour = hour < 10 ? "0" + hour : hour;

            second = second < 10 ?"0" + second : second;
            console.log(hour + "======" + second);//测试代码
            // 大招 "++" 
             my$("im").src = "meimei/"+hour+"_"+second+".jpg";
        },1000);//1000毫秒就是等于1秒  1s
    </script>
</body>
</html>

六、进一步优化时钟

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <img src="" alt="" id="im">
    <script src="publick.js"></script>
    <script>
        function f1(){
            // 获取系统的日期时间
            var dt = new Date();
            // console.log(dt);
            // 获取小时
            var hour = dt.getHours();
            // 获取秒钟
            var second = dt.getSeconds();
            // 判断长度----三元运算符
            hour = hour < 10 ? "0" + hour : hour;

            second = second < 10 ?"0" + second : second;
            console.log(hour + "======" + second);//测试代码
            // 大招 "++" 
             my$("im").src = "meimei/"+hour+"_"+second+".jpg";
        }
        f1();// 上来就调用一次函数,--核心思想
        setInterval(f1,1000);//1000毫秒就是等于1秒  1s
        //总结:我们的定时器里面可以是匿名函数,也可以是命名函数。
    </script>
</body>
</html>

七、渐变效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 300px;
            height: 300px;
            background: pink;
        }
    </style>
</head>
<body>
    <input type="button" value="渐变" id="btn">
    <div id="dv"></div>
    <script src="publick.js"></script>
    <script>
         var opacity = 10;//为了避免小数出现bug,我们给个10
         my$("btn").onclick = function(){
             var timeId = setInterval(function(){
                 opacity--;
                //判断不要出现负数
                if(opacity <= 0){
                    // 清除定时器
                    clearInterval(timeId);
                }
                my$("dv").style.opacity = opacity / 10;//因为我们前面给了一个10
             },200);
         }
    </script>
</body>
</html>

八、定时器之setTimeout

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /* 
        我们的定时器有两种:setInterval(函数,时间)----轮播图
        我们的setTimeout(函数,时间)---- 只执行一次,--弹出广告,到了时间就执行一次
        setTimeout(函数,时间)
        参数1:函数
        参数2:时间 单位是毫秒 1000毫秒等于1秒 1s
        */
        window.onload = function(){
            var timeId = setTimeout(function(){
                alert("我只弹出一次");//就算你是弹出一次,我们要清除定时器---我们程序员约定--规范
            },1000);
            
            my$("btn").onclick = function(){
                clearTimeout(timeId);//定时器清除的----这样可以节省内容
                console.log("成功清除");//测试是否成功清除
            }
        }

        // 大总结:不管是哪个定时器setInterval()和setTimeout 都要清除定时器--规范--规定。
    </script>
    <input type="button" value="清除定时器" id="btn">
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值