javascript事件处理二 事件对象event详解及target和currentTarget区别

news2024/11/25 22:58:00

在处理事件的时候,所有和事件相关的东西都封装到event这个对象里面。所以这个对象非常的重要。这个对象有非常多的内容,我们讨论几个计较常见和以及比较难区别的target和currentTarget。

常见属性

页面就是一个div,然后我们监听他的oclick事件。
在这里插入图片描述

type属性:
这个属性返回事件类型,我们监听的是点击事件,所以返回的是click,注意前面是没有加on的,别的事件都是类似的,只是没有开头的on。

boxContent.onclick = function (event) {
    //事件类型
	console.log("type:"+event.type);//click
}

clientX和clientY:
这个相对于视口原点,返回点击位置的坐标,非常好理解。

//相对于视口原点(左上角)
console.log("clientX:"+event.clientX+" clientY:"+event.clientY);

pageX和pageY:
相对于页面,当发生向下滚动的时候,相对于滚动前的原点((左上角))。和clientX/Y只是有没有滚动的区别。

//相对于页面,当发生向下滚动的时候,相对于滚动前的原点((左上角))
console.log("pageX:"+event.pageX+" pageY:"+event.pageY);

screenX和screenY:
相对于屏幕,而不是浏览器。

//相对于屏幕,而不是浏览器
console.log("screenX:"+event.screenX+" screenX:"+event.screenY);

下面的属性需要修改一下页面测试。
仅仅是在div里面套了一个span。
还是只监听div的onclick方法。
还是只监听div的onclick方法。
还是只监听div的onclick方法。
在这里插入图片描述
eventPhase:
我们分别点击黄色的span区域和绿色的div区域

//监听div的onclick方法
console.log("eventPhase:"+event.eventPhase);

分别输出3和2。那么3和2代表什么意思呢?其实就是指的下图的三个阶段。大部分浏览器默认情况下都是通过冒泡来处理的,也就是点击span的时候,div要在冒泡阶段(3)才能接收到这个事件。而直接点击div的时候,div在目标阶段(2)就开始处理事件了。也可以设置默认的处理方式为捕获(1)。得出的结果就是1和2。如果不能理解,仔细阅读上一篇文章。

在这里插入图片描述

target和currentTarget区别:
这个是最重要的一个内容的,前面的内容实际上很少用到,这个却比较常用。
还是上面的情况,如果我只是点击div的部分,那么这两个变量是一样的。

console.log(event.target===event.currentTarget)

但如果我点击的是span,就不一样了。我们还是要看上面这张图target指的就是target phase的这个target。也就是点击事件实际上是发生在span身上的(因为span是dom的最里层)。而我们的onclick监听是注册在div身上的,也就是处理是发生在div身上的,也就是我们的currentTarget。

这个内容非常重要,后面的内容需要这个为基础,好好理解一下。

        //事件发生的地方
        console.log(event.target);
        //事件正在处理的地方
        console.log(event.currentTarget);

在这里插入图片描述

常见方法

阻止默认行为

这个非常的简单,有些时候,我们不希望控件的默认按钮生效,例如没有权限,或者不能满足触发的条件。这时候就可以通过preventDefault阻止默认行为。

    var a = document.querySelector("a");
    a.onclick=function (event){
        event.preventDefault()
    }

阻止事件传递

实现下面的效果,div里面有span,span里面有button。监听这三个元素的捕获和冒泡。然后我们点击按钮。
在这里插入图片描述

<div class="box">
    <span>
        <button>按钮</button>
    </span>
</div>
    <style rel="stylesheet">
        div {
            width: 500px;
            height: 500px;
            background-color: lightgreen;
        }

        span {
            display: block;
            width: 200px;
            height: 200px;
            background-color: gold;
        }
    </style>
    var divEl = document.querySelector(".box");
    var spanEl = document.querySelector("span");
    var btnEl = document.querySelector("button");

    divEl.addEventListener("click",function (){
        console.log("div的事件捕获监听");
    },true)

    spanEl.addEventListener("click",function (){
        console.log("span的事件捕获监听");
    },true)

    btnEl.addEventListener("click",function (){
        console.log("button的事件捕获监听");
    },true)

    divEl.addEventListener("click",function (){
        console.log("div的事件冒泡监听");
    })

    spanEl.addEventListener("click",function (){
        console.log("span的事件冒泡监听");
    })

    btnEl.addEventListener("click",function (){
        console.log("button的事件冒泡监听");
    })

就可以得到下面的结果。
在这里插入图片描述
这个执行顺序就是整个事件传递的过程,我们希望在某个过程后事件就停止传递。就可以下下面的代码。例如我想执行div的捕获后,也就是第一个事件后就立刻停止传递。就可以写下面的代码。

    divEl.addEventListener("click",function (event){
        console.log("div的事件捕获监听");
        event.stopPropagation()
    },true)

事件监听this的指向

我们直接打印就知道了。直接说结论,不管是通过什么方式监听,不管监听的元素是作为子元素或者父元素,this都指向这个元素自身。

    divEl.addEventListener("click",function (event){
        console.log(this)
    })

    divEl.onclick=function (){
        console.log(this)
    }

在这里插入图片描述
下面的等式都是返回true。

    divEl.addEventListener("click",function (event){
        console.log(this)
        console.log(event.currentTarget===this)
        console.log(divEl===this)
    })

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/4455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python+大数据-Spark技术栈(三) SparkCore加强

Python大数据-Spark技术栈(三) SparkCore加强 重点&#xff1a;RDD的持久化和Checkpoint提高拓展知识&#xff1a;Spark内核调度全流程&#xff0c;Spark的Shuffle练习&#xff1a;热力图统计及电商基础指标统计combineByKey作为面试部分重点&#xff0c;可以作为扩展知识点 …

NLP | XLNet :用于语言理解的广义自回归预训练 论文详解

论文&#xff1a;XLNet: Generalized Autoregressive Pretraining for Language Understanding 论文地址&#xff1a;https://proceedings.neurips.cc/paper/2019/file/dc6a7e655d7e5840e66733e9ee67cc69-Paper.pdf 1.介绍 XLNet 是从蓬勃发展的自然语言处理 (NLP) 领域中出…

食用前须知(阅读并同意后在食用其他部分)

昨天刚和计科某数据结构老师聊这个事 让我别写题解了 以后会偷摸的在csdn更&#xff0c;大家千万低调点&#xff0c;严谨点&#xff01;&#xff01;&#xff01; 一般不会当天更了&#xff0c;会拖个一两天&#xff0c;大家先把会的写写&#xff0c;不会的再来看我教程 就算真…

高效率Paper写作需要哪些建议?

高效写Paper最关键的是要多写&#xff0c;写多了&#xff0c;英语行文能力提高&#xff0c;并且知道Paper写作大概的套路&#xff0c;Paper写作效率自然上升。小编为同学们带来一些建议。 The key to writing paper efficiently is to write more.If you write more,improve yo…

ijkplayer项目

ijkplayer项目 环境配置 NDK全称&#xff1a;Native Development Kit。 1、NDK是一系列工具的集合。NDK提供了一系列的工具&#xff0c;帮助开发者快速开发C&#xff08;或C&#xff09;的动态库&#xff0c;并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨…

C++ Reference: Standard C++ Library reference: C Library: cwchar: wmemset

C官网参考链接&#xff1a;https://cplusplus.com/reference/cwchar/wmemset/ 函数 <cwchar> wmemset wchar_t* wmemset (wchar_t* ptr, wchar_t wc, size_t num); 填充宽字符数组 将由ptr指向的宽字符数组的第一个num个元素设置为wc指定的值。 这是memset&#xff08;&…

瑞吉外卖强化(一):缓存优化

瑞吉外卖强化&#xff08;一&#xff09;&#xff1a;缓存优化瑞吉外卖 缓存优化Redis基本操作短信验证码 缓存实现缓存菜品数据SpringCache常用注解瑞吉外卖 缓存优化 Redis基本操作 redisTemplate需要配置类 这里的 需要对其进行 序列化操作 reidsTeplate.opsForValue().s…

HummerRisk 快速入门教程

1、一键部署 1. 部署服务器要求 操作系统要求&#xff1a;任何支持 Docker 的 Linux x64CPU内存要求&#xff1a;最低要求 4C8G&#xff0c;推荐 8C16G部署目录空间&#xff08;默认/opt目录&#xff09;要求&#xff1a; 50G网络要求&#xff1a;可访问互联网&#xff08;如…

Recall:JS EventLoop

有时候一段代码没有达到你想要的效果&#xff0c;可能加上setTimeout就好了 之前对事件循环一知半解&#xff0c;今天重新深入理解一下&#x1f602; 宏任务 JS是单线程的&#xff0c;但是浏览器是多线程的&#xff0c;当 JS 需要执行异步任务时&#xff0c;浏览器会另外启…

企业架构概述及业务架构详解

编辑导语&#xff1a;企业架构可以辅助企业完成业务及IT战略规划&#xff0c;还是企业信息化规划的核心&#xff0c;也有助于个人职业的健康长远发展。本文作者对企业架构的全景以及业务架构设计进行了分析&#xff0c;感兴趣的小伙伴们一起来看一下吧。 1&#xff09;对公司而…

PyTorch 加载 Mask R-CNN 预训练模型并 fine-tuning

目录1 Mask R-CNN 原理(简单版)2 ROI Align3 PyTorch 加载预训练模型1 Mask R-CNN 原理(简单版) Mask R-CNN 是一个实例分割&#xff08;Instance segmentation&#xff09;算法&#xff0c;主要是在目标检测的基础上再进行分割。 Mask R-CNN 算法主要是 Faster R-CNN FCN&…

算法练习题(涉外黄成老师)

1.带锁的门在走廊上有n个带锁的门&#xff0c;从1到n依次编号。最初所有的门都是关着的。我们从门前经过n次&#xff0c;每一次都从1号门开始。在第i次经过时(i1,2,…,n)我们改变i的整数倍号锁的状态:如果门是关的&#xff0c;就打开它;如果门是打开的&#xff0c;就关上它。在…

CEC2015:(二)动态多目标野狗优化算法DMODOA求解DIMP2、dMOP2、dMOP2iso、dMOP2dec(提供Matlab代码)

一、cec2015中测试函数DIMP2、dMOP2、dMOP2iso、dMOP2dec详细信息 CEC2015&#xff1a;动态多目标测试函数之DIMP2、dMOP2、dMOP2iso、dMOP2dec详细信息 二、动态多目标野狗优化算法 多目标野狗优化算法&#xff08;Multi-Objective Dingo Optimization Algorithm&#xff0…

#入坑keychron#你还没一起入坑吗?

经济和科技飞速发展的今天&#xff0c;我们早已不在像从前那样有电脑玩就行&#xff0c;现在的我们追求的是更高的配置、更好的体验&#xff0c;就像从前一碗泡面就是最高的理想&#xff0c;而现在最少都得有根泡面搭档才能勉强接受&#xff0c;连泡面都有搭档&#xff0c;电脑…

web前端期末大作业:旅游网页设计与实现——个人旅游博客(4页)HTML+CSS

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

【后端】初识HTTP_2

我们学习的HTTP协议&#xff0c;是应用层里面最广泛使用的协议~ 我们主要是学习HTTP的请求响应的报文格式 我们可以借助抓包工具来学习&#xff0c;抓包抓到的是文本格式~~ 根据上节内容 我们大概了解了请求和响应的格式 请求有4部分&#xff1a; &#xff08;1&#xff…

leetcode 51. N皇后 回溯法求解(c++版本)

题目描述 简单来说就给一个N*N的棋盘 棋盘上的每一列每一行以及每一个对角不能出现两个皇后 因此明确以下几点 要找出所有可能的解法也是采用回溯法进行求解&#xff08;具体在下面进行详解&#xff09; 用下面一张示例图来说明回溯法的思路 说白了就是进行搜索&#xff0c;…

java项目-第102期基于ssm的校园二手交易平台-java毕业设计

java项目-第102期基于ssm的校园二手交易平台 【源码请到资源专栏下载】 1、项目简述 Hi&#xff0c;大家好&#xff0c;今天分享的源码是基于ssm的校园二手交易平台。 该交易平台分为两部分&#xff0c;前台和后台。用户在前台进行商品选购以及交易&#xff1b;管理员登录后台可…

python-(6-3-3)爬虫---requests入门(对参数封装)

文章目录一 需求二 分析三 代码四 补充说明一 需求 爬取豆瓣电影的“纪录片”的电影信息数据 二 分析 老规矩&#xff0c;先在网页的“检查”中提取我们需要的信息 如下图所示。在“纪录片”那一页面&#xff0c;选择"network"----“XHR”----“preview”。 我们…

【附源码】Python计算机毕业设计面向社区的购物平台系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…