zoukankan      html  css  js  c++  java
  • 事件对象的兼容性

      事件对象:event

      1.常用事件:onclick(点击)  onmouseenter(鼠标进入)  onmouseover(鼠标悬浮)  onmouseleave(鼠标离开)  onfocus(表单聚焦)  onblur(表单失去焦点)  onmouseout(鼠标移出)  onmousemove(鼠标移动)  onmousedown(鼠标按下)  onmouseup(鼠标抬起)  onchange(表单内容修改)  浏览器加载完成(onload)  计数器(count)

      2.每个元素身上的事件都是天生存在的,不需要我们去定义,只需要我给这个事件绑定一个方法,当事件触发的时候,就会执行这个方法

      3.事件绑定的写法:

      1.div.onclick=function(){}    dom0级事件

      2.div.addEventListener或者div.attachEvent      dom2级事件

      写法上二者的区别

      1.onclick这个元素的属性是私有的   而  addEventListener()是公有的属性 从EventTarget(事件源)继承来的   ie低版本attachevent也是公有的

      2.div.onclick存在事件冒泡机制,没有捕获

        div.addEventListener可有冒泡,可有捕获;

        div.attachEvent 只有冒泡,没有捕获;  

      4.div.addEventListener和div.attachEvent的区别?

        1.前者有冒泡和捕获机制,后者只有冒泡机制;

        2.事件名前者不带on,后者带on

        3.前者this指向当前元素,后者指向window

        4.前者是标准浏览器,后者ie8以下

      案例:

      var div=document.getElementById("div")

      div.onclick=function(){

        console.log(arguments)

        }

      上面控制台arguments数组有一个元素叫mouseevent

      arguments(参数):

      每个函数都有一个arguments对象,他是这个函数,所有参数构成的集合

      所以每个事件的方法中浏览器都给它一个参数叫mouse event,我们所有的鼠标信息在这个mouse event上 

      1.event兼容性:声明不一样

      标准浏览器声明为undefined        IE声明为null          火狐无法识别(会报错)

      解决办法:

      div.onclick=function(ev){

        var ev=ev||window.event

        }

      clientX和clientY的兼容性是鼠标离浏览器窗口左上角的坐标距离

      pageX和pageY他是鼠标到网页(文档)左上角的距离坐标,但是IE低版本没有这个属性,在IE下怎么算pageY的值,用clientY+scrollTop

      2.事件源,点击哪个元素,哪个元素就是事件源

      事件源的兼容:

      标准浏览器的事件源是ev.target    ie低版本(5-8)不识别这个属性,但是ie有ev.srcElement这个属性和target差不多

      3.阻止事件冒泡的兼容性(之前的版本有,现在没有了,仅供了解)

      第一种:ie低版本的写法为event.cancelBubble=true;       标准浏览器的写法为:event.stoppropagation(现在标准浏览器也支持了event.cancel Bubble的写法)

      他的兼容性写法为:event.stoppropargation?event.stopropagation:event.cancelBubble;

      阻止事件默认行为的兼容性:

      4.阻止事件默认行为的兼容性:

      比如  a的href

      href为空,会自动刷新页面

      href为#,  锚点跳转

      href为JavaScript:; 阻止默认行为的发生    

      (以上是a标签阻止浏览器的默认行为,但也有别的事件会有默认行为)

      标准浏览器:

      event.preventDefault()

      ie低版本的写法:

      event.retrunValue

      兼容性的写法为event.preventDefault()?event.preventDefaulf():event.returnValue;

      事件委托:

      委托就是利用事件冒泡(所有的dom操作离不开事件)

      如果子元素身上绑定大量相同的事件,我们尽量采用事件委托,所有子元素把自己的子元素委托给父级

      传统的for循环绑定事件会增加大量的dom操作(事件)影响页面性能,采用事件委托就把所有事件基于一个元素上

      事件委托的原理:采用事件冒泡机制完成的

      2.事件委托和传统事件绑定的优势?

      传统事件对新增元素不起作用,事件委托起作用

      传统事件绑定,有多少元素,js就绑定多少事件,事件委托,只需要一个事件

      并不是所有事件都存在事件冒泡:

      onmouseenter(鼠标进入)  onmouseleave(鼠标离开)就没有事件冒泡

      所以我们做跟随鼠标的时候,尽量用者两个事件

      

      

  • 相关阅读:
    LINUX云计算40个相关问题
    sql
    补肾
    少吃食品
    抗癌食品
    爱情感言
    分布式事务的处理
    前端
    JAVA->Enum
    Sleuth+Zipkin+Log
  • 原文地址:https://www.cnblogs.com/shangjun6/p/10057047.html
Copyright © 2011-2022 走看看