博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript之事件
阅读量:6999 次
发布时间:2019-06-27

本文共 2064 字,大约阅读时间需要 6 分钟。

hot3.png

1、什么事事件?

    事件分为两部分:1->行为本身:浏览器天生就赋予其的行为 onclick、onmouseover、onmouseenter、onmouseout、onmouseleave、onmousemove、onmousedown、onmouseup、onmousewheel(鼠标滚动事件)、onscroll(滚动条滚动行为)、onesize(window.onresize;浏览器窗口的大小改变事件)、onload、onunload(浏览器关闭事件)、onfocus(文本框获取焦点事件)、onblur(文本框失去焦点事件)、onkeydown、onkeyup(浏览器按下和抬起行为)......

    哪怕没有给上述的行为绑定方式,事件也是存在的,当我们点击的时候,同样会触发它的onclick行为,只是什么都没有做而已,但是这个事件是存在的

    2->事件绑定:给元素的某一个行为绑定方法:

    //DOM0级事件绑定

    Ele.onclick = function(){}  //  onclick这个行为定义在当前元素的私有属性上

    //DOM2级 事件绑定

    Ele.addEventListener = function(){}  //addEventListener这个属性是定义在当前元素EventTarget这个类得原型上

    重要:不仅仅把绑定的方法执行,而且浏览器还默默地给这个方法传递了一个参数值->mouseEvent(鼠标事件对象),1:它是一个对象数据类型的值,里面包含了很多的属性名和属性值,这些都是用来记录当前鼠标的相关信息的,2:mouseEvent->UIEvent->Event->Object   原型,3:MouseEvent记录的是页面中唯一一个鼠标每次触发时候的相关信息,和到底在那个元素上出发的没有关系

2、关于事件对象MouseEvent的兼容问题

    1:事件对象本身的获取存在兼容问题:标准浏览器是浏览器给方法传递的参数,我们只需要定义形参e就可以获取到;但是在IE6~8中,浏览器不会传递参数,如果需要的话,需要到window.event中查找

    e = e || window.event  //兼容的写法  e.c;ientX/e.clientY 当前鼠标触发点距离左上角的坐标值

    e.pageX/e.pageY:当前鼠标触发点距离body左上角(页面第一屏的最左上角)的x/y轴的坐标,但是此属性在IE6~8是没有这个属性,我们通过使用clientY+滚动条卷去的高度也可以 e.pageX = e.pageX || (e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft))  e.pageY = e.pageY || (clientY + (document.documentElement.scrollTop || document.body.scrollTop))

     e.type:存储的当前鼠标触发的行为类型"click"

    e.target  事件源,当前鼠标触发的是哪个元素,那么它存储的就是哪个元素,但是在IE6~8不存在这个属性(undefined),用e.srcElement来获取事件源

    e.target = e.target || e.srcElement  //兼容性处理

    e.preventDefault:阻止浏览器的默认行为,在IE6~8中没有这个方法,我们需要使用e.returnValue=false 来代替

        e.preventDafault ? e.preventDefault() : e.returnValue=false      这样写和return false的效果是一样的,都是阻止默认行为

    e.stopPropagation:阻止事件的冒泡传播,在IE6~8中不兼容,使用e.cancelBubble=true来代替

 

事件的传播机制:

    事件的默认传播机制

        捕获事件:从外到内依次查找元素

        目标阶段:当前事件源本身的操作

        冒泡阶段:从内到外依次触发相关的行为(我们最常用的就是冒泡阶段)

    使用DOM0级事件绑定给元素的某一个行为绑定的方法,都是在行为出发后的冒泡阶段把方法执行

    不同浏览器传播的最顶层的位置是不一样的,在谷歌浏览器中是可以传播到document的,在IE中只能传播到HTML

addEventListener:第一个参数是行为类型,第二个参数是给当前的行为绑定方法,第三个参数是控制在哪个阶段发生:true 在捕获阶段发生,false 在冒泡阶段发生

 

onmouseover和onmouseenter 都是鼠标进入的事件,但是onmouseenter不会发生事件的传播,自动的阻止了事件的传播,而onmouseover没有这个功能,需要手动阻止事件的传播

转载于:https://my.oschina.net/u/3419199/blog/1503690

你可能感兴趣的文章
http协议的再次理解
查看>>
hdu 2089 不要62 【数位DP】
查看>>
Android 利用Gson生成或解析json
查看>>
mybatis 之resultType="Map"
查看>>
关于redis中SDS简单动态字符串
查看>>
WordPress主循环(The Loop)函数have_posts(),the_post()详解
查看>>
【Java学习笔记之八】JavaBean中布尔类型使用注意事项
查看>>
jQuery核心函数——(一)
查看>>
License友好的前端组件合集
查看>>
OCR 基本知识
查看>>
Oracle中对数字加汉字的排序(完好)
查看>>
linux kvm虚拟机使用
查看>>
leetcode笔记:Bulls and Cows
查看>>
Redis具体解释
查看>>
如何编写更好的SQL查询:终极指南-第一部分
查看>>
如何使用RestTemplate访问restful服务
查看>>
thinkphp中cookie和session中操作数组的方法
查看>>
linux内核剖析(十一)进程间通信之-共享内存Shared Memory
查看>>
rman备份OBSOLETE和EXPIRED参数来历及区别
查看>>
离线安装Cloudera Manager 5和CDH5(最新版5.9.3) 完全教程(五)数据库安装(双节点)...
查看>>