DOM2和DOM0的区别

发布时间 2023-08-31 17:08:24作者: 饼MIN

事件的定义

事件:元素天生具备的行为方式(和写不写JS代码没有关系)
【onclick不是事件,click才是事件,浏览器会把一些常用事件挂载到元素对象的私有属性上,让我们可以实现DOM0事件绑定】,当我们去操作元素的时候会触发元素的很多事件
事件绑定:给当前元素的某个事件绑定方法,目的是让当前元素某个事件被触发时,做出一些反应

常用的事件汇总

表单元素常用事件
  • blur:失去焦点
  • focus:获取焦点
  • change:内容改变
  • select:被选中事件
键盘常用事件
  • keydown:用户在键盘上按下某按键时发生,一直按着某按键则会不断触发(opera浏览器除外),可以识别组合键和功能键,不区分字母大小写
  • keyup:键盘抬起,可以识别组合键和功能键
  • keypress:键盘按下(中文输入法不能触发,英文状态下可以触发,因为文本被输入到文本框中),并且用户按下一个按键,并产生一个字符时发生(也就是不识别类似shift、alt、ctrl之类的键,就是说用户按了一个能在屏幕上输出字符的按键keypress事件才会触发)一直按着某按键则会不断触发。不能捕获组合键,区分字母大小写
键盘事件对象
  • code:当前按得键盘按键是哪一个 【IE6-8没有这个属性】key属性和code一样,储存形式不一样
  • keyCode:存储的是当前按键的码值(大部分按键都有自己的码值)
  • which:和keyCode一样,也是当前按键的码值(which不兼容IE6-8)

这几个码值需要记住(删除:8 、 回车:13、 空格:32、 tab :9、)

鼠标常用事件
  • click:点击(不是单击)
  • dblclick:双击(300ms之内连续触发两次点击事件)
  • mouseover:鼠标滑过,鼠标滑到元素上:存在事件的冒泡传播机制
  • mouseout:鼠标滑出
  • mouseenter:鼠标进入,鼠标进入元素里;浏览器阻止了它的冒泡传播机制;用默认的捕获机制,mouseenter不存在冒泡传播,不能使用事件委托
  • mouseleave:鼠标离开
  • mousedown:鼠标按下(左键)
  • mouseup:鼠标左键抬起
  • mousewheel:鼠标滚轮滚动
  • mousemove:鼠标移动
  • contextmenu:鼠标右击事件
鼠标事件对象
  • type:当前触发事件的类型
  • target:事件源(当前鼠标操作的是那个元素)(IE6-8没有该属性,用srcElement这个属性代表事件源)
  • preventDefault:作用:阻止事件的默认行为;(IE6-8没有该方法,使用 returnValue=false处理)
  • 在a标签中阻止事件的默认行为 < a href='javascript:;' >
其他常用事件
  • load:加载成功
  • error:加载失败
  • scroll:浏览器滚动条滚动
  • resize:窗口大小改变事件

【移动端】

移动端键盘一般都是虚拟键盘,虽然存在keydown,keyup,但兼容不好,使用input事件代替
移动端没有鼠标,所以鼠标类事件在移动端兼容性非常差,mouse类事件基本无法使用
移动端大部分事件是靠手指完成的,所以它独有手指事件

  • 单手指事件:touchstart touchmove touchend touchcancel..
  • 多手指事件:gesturestart gestuerchange gestuerend..
    移动端还有很多事件是靠硬件完成的:手机传感器,陀螺仪,重力感应器等
    移动端兼容click事件,它把click当做单击使用(会有300MS的延迟事件)

DOM0

在DOM0事件绑定中,只能给当前元素的某一个事件行为绑定一个方法,绑定多个方法,最后一次的绑定的会替换前面绑定的
可以同时绑定几个不同的事件,不能同时绑定多个相同的事件
移除事件绑定的时候,我们只需要赋值为null;

DOM2

同时绑定几个事件(相同或不同),然后顺序执行,不会覆盖
DOM2中可以给当前元素的某一事件行为绑定多个不同方法(因为绑定的所有方法都放在事件池中)
事件的移除:事件类型、绑定的方法、传播阶段三个完全一致,才可以完成移除(因此在绑定方法时,尽量不要用匿名函数,否则不好移除)
xxx.removeEventLister('事件类型',function(){},false)

参考文章:DOM0和DOM2级事件