Event事件对象

本节主要内容:

学习目标:

节数知识点要求

第一节 event对象关于event对象了解

event对象的使用了解

第二节 event中常用的属性和方法event中常用属性了解

event中常用的方法了解

第三节 ie中常用的属性和方法ie浏览器常用的属性和方法掌握

第四节 鼠标滚轮事件鼠标滚轮事件掌握

第五节 文档事件文档事件掌握

第六节 事件委托事件委托掌握

一、event对象

1.1关于event对象

概念: Event 对象代表事件的状态,当dom tree中某个事件被触发的时候,会同时自动产生一个用来描述事件所有的相关信息(比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。)的对象,这个对象就是event(事件对象)。

1.2 Event事件对象的使用

1.2.1直接通过event来获取

1.2.2 通过函数传参数的形式  还可以通过函数传参数的形式来使用,一般而言我们使用【形参e或event】来代替。

1.document.querySelector("#d1").onclick = function(e){

    console.log(e);

}; 2.document.querySelector("#d1").onmousemove = function(eve){

    console.log(eve);

}

3.document.querySelector("#d1").onkeyup = function(){

    console.log(event);

};

因为event对象是用来描述【发生的事件的信息】的,而event对象当中所提供的一系列属性和方法正是用来获取这些信息的途径。

二.event中常用的属性和方法

2.1 event中常用的属性

因为event对象是用来描述【发生的事件的信息】的,而event对象当中所提供的一系列属性和方法正是用来获取这些信息的途径。

2.1.1 type 属性

type属性用来获得【当前触发事件】的类型,此属性只读。

document.getElementById(“d1”).onclick = function () {          console.log(event); console.log(event.type); //依赖于事件的触发而存在,只读属性    };

2.1.2 bubbles属性

bubbles属性用来获得【当前触发事件的类型】是否冒泡,如果当前事件类型支持冒泡则返回true,否则返回false。

    必须注意的是:bubbles属性指的是该事件是否冒泡。和事件处理机制无关!!!!

    document.getElementById(“d1”).onclick = function () {​          console.log(event.bubbles);​    };

    document.getElementById(“d1”).addEventListener('mouseenter',function (e) {​          console.log(e.bubbles);​    });

    因为鼠标【点击事件】这个事件本身支持冒泡。

    因此当存在点击事件被触发后,event对象的bubbles属性返回的就是true,表示当前事件支持冒泡。

2.1.3 eventPhase 属性

eventPhase:事件传导至【当前节点】时处于什么的状态

        1:事件处于捕获状态

        2:事件处于真正的触发者

        3:事件处于冒泡状态

    d1.onclick = function (e) {console.log(this, e.eventPhase);};​    d2.onclick = function (e) {console.log(this, e.eventPhase);};​    document.onclick = function (e) {console.log(this, e.eventPhase);};

    d1.addEventListener('click', function (e) {console.log(this, e.eventPhase)}, true);​    d2.addEventListener('click', function (e) {console.log(this, e.eventPhase)}, true);​    document.addEventListener('click', function (e) {console.log(this, e.eventPhase)}, true);

2.1.4 target 属性和 currentTarget 属性

    target:返回事件真正的触发者

    currentTarget:返回事件的监听者(触发的事件绑定到了哪个节点,就返回谁)

    document.getElementById("d1").onclick = function (e) {​        console.log(e.target);​        console.log(e.currentTarget);​    };

2.1.5 button属性

button 返回当事件被触发时,哪个鼠标按钮被点击。

event.button=0|1|2

参数  描述

0  指定鼠标左键

1  指定鼠标中键

2  指定鼠标右键

注意: Internet Explorer 8 及更早IE版本有不同的参数:

参数  描述

1  指定鼠标左键。 (IE8及更早IE版本)

4  指定鼠标中键。 (IE8及更早IE版本)

2  指定鼠标右键。

2.16 key和keyCode属性

key是哪个键

keyCode返回keydown何keyup事件发生的时候按键的代码,以及keypress 事件的Unicode字符(ASCII码值);(firefox2不支持 event.keycode,可以用 event.which替代 )

2.1.7获取当前坐标的属性

clientX得到当前屏幕可视区域x坐标的值(不包含滚动条)

clientY得到当前屏幕可视区域y坐标的值(不包含滚动条)

screenX得到当前屏幕x坐标的值

screenY得到当前屏幕y坐标的值

pageX得到当前屏幕可视区域x坐标的值(包含滚动条)

pageY得到当前屏幕可视区域y坐标的值(包含滚动条)

2.2 event中常用的方法

stopPropgation():阻止冒泡。

preventDefault():默认阻止。

三、IE中的event对象的常用属性和方法

3.1 IE中的event对象的常用属性和方法

srcElement (target)属性:返回的是目标对象

cancelBubble 属性:取消冒泡

returnValue属性:默认阻止

3.3 兼容性问题

通过对IE下event的方法和非IE的方法的介绍,能够感觉到两种情况的很多属性和方法大致都相同,只不过会在某些特殊方法上面存在不同的兼容性写法。因此我们可以提出一些同时满足不同浏览器兼容性的写法。

属性的兼容性写法我们已经说过:

        var target = eve.target || eve.srcElement;

        var eve = eve || window.event 

方法的兼容性写法我们也可以仿照这个来进行编写。思路如下:

(1)因为两种情况下的event对象获取方式并不同,所以希望能够自定义一个对象来替代event对象的使用。

(2)因为想要自定义对象在功能上和系统event对象的方法相同,所以需要给自定义对象添加方法

参考代码:

var Event = {

    stop:function () {​      if(event.stopPropagation){​              event.stopPropagation();​      }else {​              event.cancelBubble = true;​            }​      },​    quxiao:function () {​        if(event.preventDefault){​            event.preventDefault();​        }else {​            event.returnValue = false;​        }​    } };

四、鼠标滚轮事件

滚轮就是鼠标上的滚轮,它滚动的时候触发事件

4.1滚轮事件

onmousewheel就是鼠标滚动事件,mouse鼠标,wheel就是轮子。

event参数最最重要的事就event.wheelDelta属性,表示滚动的方向。这是浏览器的规定:

鼠标往上滚, 120

鼠标往下滚, -120

4.2火狐浏览器滚轮事件

火狐浏览器不兼容,火狐使用自己的专用事件DOMMouseScroll ,并且这个事件只能通过标准的DOM2级的事件绑定方式添加。

火狐添加的事件,是它自己的专门事件DOMMouseScroll,

表示滚动方向的事件的属性叫做event.detail。

detail就是细节的意思。反着的,滚动方向往上,-3;滚动方向往下,3。

4.3 封装浏览器兼容性

五、文档事件

(1)  加载成功\失败事件:load\error

load事件指的是:节点加载成功时自动发生回调事件

error事件值得是:节点加载失败时自动发生的回调事件

(2)  当DOM加载完成时触发事件:DOMContentLoaded

DOMContentLoaded事件和load事件的区别是触发的时机不一样,先触发DOMContentLoaded事件,后触发load事件。

DOM文档加载的步骤为:        解析HTML结构。        加载外部脚本和样式表文件。        解析并执行脚本代码。        DOM树构建完成。  //DOMContentLoaded执行        加载图片等外部文件。        页面加载完毕。 //load执行

(3)  文档加载状态判断事件:readystatechange

众所周知,document节点中拥有一个属性叫做readyState。其拥有三个可能值:

    loading:加载DOM中

    interactive:加载外部资源

    complete:加载完成

    而readystatechange事件正是在这个状态发生改变时调用的事件。

六、Event案例

6.1 二级联动

6.2 三级联动

6.3 放大镜案例

七、事件委托

7.1 什么是事件委托

事件委托/事件代理:事件委托就是利用【事件冒泡】,自己本身做不了这个事,让让上一级来做这个事,只指定一个事件处理程序,就可以管理某一类型的所有事件。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342