JavaScript事件

主要内容:

  1. 事件类型

  2. 事件绑定

  3. 事件解绑

  4. 事件对象

==========================1. 事件类型==========================

鼠标事件:
  click  鼠标单击
  bdclick  鼠标双击
  mouseover  鼠标放上
  mouseout  鼠标移开
  mousemove  鼠标移动
  onmousedown  鼠标单击按下
  onmouseup  鼠标单击松开
  mouseenter:鼠标进入
  mouseleave:鼠标离开

  【注】经过子节点会重复触发:mouseover   mouseout

     经过子节点不会重复触发: mouseenter  mouselaeve

键盘事件:

  keydown:按键按下
  keypress:按键按下(只支持字符键)
  keyup:按键抬起

HTML事件:
  1. window事件
    load:文档加载完成
    unload:当页面解构的时候触发(只有IE浏览器支持)
    resize:窗口尺寸变化
    scroll:滚动条移动
  2. 表单事件
    blur:失去光标
    focus:得到光标
    select:被选中的时候
    change:内容被改变

    【注】必须添加在form元素节点上
    submit:当用户点击提交按钮在元素上触发。
    reset:当用户点击重置按钮在元素上触发。

==========================2. 事件绑定==========================

1.    on+事件类型 (弊端:同一事件只能给同一元素绑定一次)

 a、内联模式

不符合结构、样式、行为相分离的原则

一个元素绑定多个事件时,只会执行第一个事件

 b、外联模式

获取到dom元素,并在元素上绑定事件

一个元素绑定多个事件时,后面的事件会覆盖前面的事件

2.    事件监听器 (可给同一元素绑定多个事件,不会覆盖)

aobj.addEventListener(typehandlerfalse/true);

低版本IE中没有该事件监听

参数1:事件类型

参数2:事件执行触发的函数

参数3:是否在冒泡阶段执行,true在捕获阶段执行,false在冒泡阶段执行,可选项。一般的绑定事件,都是采用冒泡方式

如果给同一元素绑定多个事件,那么采用先绑定先执行的顺序执行

使用 removeEventListener() 移除绑定过的事件

bobj.attachEvent('on' + typehandler);

针对低版本IE的写法,低版本IE不存在捕获阶段,所以没有第三个参数

如果给同一元素绑定多个事件时,采用先绑定后执行的规则  倒序执行

使用detachEvent()移除绑定过的事件 

事件监听器绑定兼容写法:

1 function bind(ele,type,handle){  // 要绑定的事件对象 ,事件类型 , 事件处理函数
2     if(ele.addEventListener){
3         ele.addEventListener(type,handle,false);
4     }else if(ele.detachEvent){
5         ele.attachEvent("on"+type,handle);
6     }else{
7         ele["on" + type] = callback;
8     }
9 }

==========================3. 事件解绑==========================

一般情况下,执行过的代码内存会自动回收,但是事件在执行完后,内存没有自动回收,这样会导致内存一直占用,代码执行效率降低,所以事件解绑有利于性能优化 

1.    使用“on+事件类型”方式绑定的事件,只要给他赋值为 null ,就能解绑

2.    针对于addEventListener()的解绑方式

removeEventListener(ele,type, handle)

3.    针对于attachEvent()的解绑方式

detachEvent(ele,type, handle)

事件解绑同样有兼容写法

1 function unbind(ele,type,handle){
2       if(ele.removeEventListener){
3         ele.removeEventListener(type,handle,false);
4       }else if(ele.detachEvent){
5         ele.detachEvent("on"+type,handle);
6       }else{
7         ele["on" + type] = null;
8       }
9     }

==========================4. 事件对象==========================

 事件绑定:元素节点.on + 事件类型 = 匿名函数;

            触发某个事件,都会产生一个事件对象Event

            触发事件的时候,系统会自动去调用事件绑定的函数.将事件对象当作第一个参数传入

       

 事件对象的属性

1.    鼠标按钮属性

dom为事件对象提供了button属性,来区分鼠标上的三个按钮

0        规定鼠标左键。

        1        规定鼠标中键(滚轮)。

        2        规定鼠标右键。

     

2.    鼠标事件对象的属性

获取当前鼠标位置,原点位置不一样

clientX            clientY        

原点位置:可视窗口的左上角为原点

pageX     pageY

原点位置:整个页面的左上角(包含滚出去的滚动距离)

screenX   screenY        

原点位置:屏幕的左上角


     

3.    修改键

和别的操作进行组合,形成一些快捷键操作

shifKey

按下shift键,为true,默认为false

altKey

 

ctrlKey

 

metaKey

 

windows系统 按下windows(开始)键,为true

macos系统    按下command键,为true

        


4.   
键盘事件对象的属性

keyCode
 

which

键码 只在keydown下支持

 格式: var which = e.which || e.keyCode;

返回值:大写字母的ASCII码值,不区分大小写。

charCode

which

字符码 只在keypress下支持,只支持字符键
格式:var which = e.which || e.charCode;
返回值:字符码区分大小写,返回当前按下键对应字符的ASCII码值

        

posted @ 2020-06-01 16:18  学渣瓜  阅读(172)  评论(1编辑  收藏  举报