js初阶学习路线

js-Day09-12.31

今日目标:

1.Event事件对象(掌握)

2.掌握事件监听的 注册,注销 方法

3.理解音乐播放器的制作思路

  • (1)事件对象

    概念:事件发生时,就会自动产生的对象(自带对象)

    ​ 事件的四要素:

    ​ 1.事件源:事件发生在谁身上,谁就是事件源

    ​ 2.事件类型:发生的事件类型

    ​ 3.事件处理函数:事件发生时,执行的函数(代码)

    ​ 4.事件对象:事件旁观者,包含了事件发生时所有的信息

    ​ 1.1 标准浏览器:事件对象,作为函数的参数传入

    function(e或者event) {
        console.log(e或者event)
    }
    

    ​ 1.2 在IE浏览器下(IE9以下,不包含IE9)

    function(e或者event) {
        console.log(window.event)
    }
    

    1.3 事件对象的兼容(重点)

    var e = e || window.event;
    console.log(e)
    

    2.1 事件对象的属性和方法:

    e.clientX : 鼠标指针的X轴坐标

    e.clientY : 鼠标指针的Y轴坐标

    function(e) {
        var e = e || window.event;
        console.log(e.clientX);
        console.log(e.clientY);
    }
    

    事件源兼容:

    IE:e.scrElement

    标准:e.target

    兼容:

    var target = e.scrElement || e.target;
    

    方法:

    e.preventDefault():阻止默认事件(相当于事件里的return false)

    //自定义菜单
    window.oncontextmenu = function(e) {
        //兼容
        var e = e || window.event;
        //阻止浏览器显示菜单
        e.preventDefault();
    }
    

    小练习:简单瞄准镜效果

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            * {
                padding: 0;
                margin: 0;
            }
            #shoot {
                width: 100px;
                height: 100px;
                background: skyblue;
                border-radius: 50%;
                font-size: 30px;
                text-align: center;
                line-height: 95px;
                position: absolute;
                left: 0;
                top: 0;
                cursor: none;
            }
        </style>
    </head>
    <body>
        <div id="shoot">+</div>
    </body>
    </html>
    
    let oDiv = document.querySelector("#shoot");
    window.onmousemove = function (e) {
        //兼容处理
        var e = e || window.event;
        //鼠标x坐标,再减去宽度的一半,让瞄准镜在鼠标正中
        let x = e.clientX - 50;
        //鼠标y坐标,再减去宽度的一半,让瞄准镜在鼠标正中
        let y = e.clientY - 50;
        //把鼠标坐标赋值给元素
        oDiv.style.left = x + "px"
        oDiv.style.top = y + "px"
    }
    
  • (2)事件注册及注销 (重点)

    ​ 事件注册有三种方式:

    ​ 第一:直接在标签上绑定 ---------- 不推荐

    ​ 第二:通过元素对象直接注册 -----------缺点:同类型事件只能注册一次

    ​ 元素对象.事件类型 = 匿名函数

    ​ 第三:通过事件监听来注册 ------------- 企业常用

    注册:

    ​ 标准浏览器(非IE):target.addEventListener(‘事件类型(不带on)’,事件处理函数)

    ​ IE模式下:target.attachEvent(‘事件类型(带on)’,事件处理函数)

    兼容写法:

    /* 
                功能说明:注册事件
                语法: addEvent(obj, type, fn)
                obj:事件源
                type:事件类型,传入不带on的
                fn:事件处理函数
    */
    function addEvent(obj, type, fn) {
        //标准模式
        if (obj.addEventListener) {
            obj.addEventListener(type, fn)
        } else {
            //非标准模式(IE)
            obj.attachEvent('on' + type, fn)
        }
    }
    

    注销:

    ​ 标准浏览器(非IE):removeEventListener(‘事件类型(不带on)’,事件处理函数)

    ​ IE模式下:target.detachEvent(‘事件类型(带on)’,事件处理函数)

        /* 
            功能说明:注销事件
            语法: removeEvent(obj, type, fn)
            obj:事件源
            type:事件类型,传入不带on的
            fn:事件处理函数
        */
        function removeEvent(obj, type, fn) {
            //标准模式
            if (obj.addEventListener) {
                obj.removeEventListener(type, fn)
            } else {
                //非标准模式(IE)
                obj.detachEvent('on' + type, fn)
            }
        }
  • (3)事件流

    ​ 概念:事件传播的顺序

    ​ 分类:

    ​ 捕捉:从根元素到具体元素,从上到下的过程

    ​ 冒泡:从具体元素到根元素,从下到上的过程

    ​ 注意:

    ​ 浏览器默认:冒泡

    ​ IE中只有冒泡

    ​ 阻止冒泡:e.stopPropagation()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值