JS事件对象、事件流、事件委托

WEBAPIS


前言

本文记录每天学习JS的进程


一、事件对象是什么?

也是对象,但是存在于事件之中(比如说鼠标点击事件,事件对象存储了鼠标点击的位置等信息)

1.如何获取

元素.addeventListener('click',function(e) {



});

>> 一般就是事件绑定回调函数的第一个参数

>> 一般命名为event  、ev、 e

    <button>点击</button>
    <script>
        let btn = document.querySelector('button')
        btn.addEventListener('click',function (e) {
            console.log(e);
        })
    </script>

点击之后的信息打印:

2.常用的属性 

    <script>
        // 给文档添加监听事件  全局有效
        // 鼠标移动事件
        document.addEventListener('click',function (e) {
            // -- 跟整个页面大小有关系
            console.log(e.pageX + ' ' + e.pageY);
            // 记录鼠标的位置 clientX clientY
            //  -- 与可视区域有关
            console.log(e.clientX+ ' ' + e.clientY);
        })
         
    </script>

3.鼠标事件案例(跟随鼠标移动)  

<!-- css的样式
  
position: absolute;  --  必须设置为绝对值才可
 -->
<style>
        img{
            position: absolute;
            top: 0;
            left: 0;
            width: 50px;
            height: 50px;
        }
</style>

    <img src="../../公用资源/图片/1.jpg" alt="测试案例">
    <!-- 只需要鼠标的坐标就行 -->

    <script>

        let img = document.querySelector('img')
        document.addEventListener('mousemove',function (e) {
            // 必须跟着单位才行,不然不能动
            img.style.left = e.pageX + 'px'
            img.style.top = e.pageY + 'px'
            
        })
    </script>

>  成品就不展示了,自己可以写一下

4.键盘事件案例 (结合微博发布案例)

>  keydown 键盘按下时触发

> keyup 键盘升起时触发

> e.key 能查看当前按下的键 (不建议用keyCode)

 

           area.addEventListener('keydown',function (e) {
               if(e.key === 'Enter'){
                    // 发布新闻
                   // 自动触发点击按钮
                    btn.click();
               }
               
           })
        //  键盘弹起就清空
        area.addEventListener('keyup',function (e) {
               if(e.key === 'Enter'){
                    // 发布新闻
                    // 自动触发点击按钮
                    area.value = ''
                 useCount.innerHTML = 0
               }

           })

二、事件流和事件委托(概念)

1.事件流

事件完整执行过程中的流动路径

 doucumen - 最大

点击一个div 两个阶段

A. 捕获阶段 (一层一层的找 ) 父 - 子 [了解]

Document - html - body - div 找到 从DOM元素的根去找对应的时间 (从外到里)

DOM.addEventListener(事件类型,事件处理函数,是否使用捕获机制)

是否使用捕获阶段: 

                                a. true --  捕获

                                b. false -- 冒泡 (默认)


// L0 监听时间
btn.onclick = function () {

   //  只有冒泡

}

B. 冒泡阶段(找到之后回流)子- 父 [掌握]

某一个元素事件被触发后,同样的事件将会在该元素的所有祖先元素中依次被触发。

 

 

 

 

 

ps:此过程就是事件冒泡 

特别注意同名事件才会触发冒泡

click -- 单击事件

dblclick -- 双击事件

都同为双击或者单击才会有反应

 

 

2.阻止事件流动

因为有冒泡的原因 

这个代码会响应三次 (点击粉红色的儿子处时)

 

 

我们想点哪谈哪  所以采用一下事件阻止

注意:  添加到哪里 哪里就会阻止 其余不受影响 继续冒泡

   e.stopPropagation();  // 阻止冒泡

 mouseover mouseout  鼠标经过事件  -->  会产生冒泡效果

 

mouseenter mouseleave 鼠标经过事件  -->  没有冒泡效果 (推荐 )

2.1 阻止一些默认行为 (链接点击不跳转,表单域的跳转) -- 与冒泡没关系

e.stopPropagation();     // 阻止默认行为


    <a href="https://www.baidu.com/" >百度网址</a>

    <script>
        let src = document.querySelector('a')
        src.addEventListener('click',function (e) {
            // 设置不能进行跳转 
            e.preventDefault(); // 提交表单是一样的
        })
    </script>

测试L 点击不了 

三、事件委托?

事件委托是利用事件的特征解决问题的一些开发技巧

 给父亲添加事件 通过父亲来控制孩子 而不是用循环 进行操作

通过事件对象e.target来控制当前你选择的对象 来进行操作

    <ul>
        <li>我是第1个小li</li>
        <li>我是第2个小li</li>
        <li>我是第3个小li</li>
        <li>我是第4个小li</li>
        <li>我是第5个小li</li>
    </ul>
    <script>
        // 事件委托
        let ul = document.querySelector('ul')
        ul.addEventListener('click',function (e) {
            // e是事件对象
            console.log(e.target);
            // 通过父亲来进行更改孩子
            e.target.innerHTML = `213`
            e.target.style.color = 'red'
        })
    </script>

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值