Jscript 事件

目录

1、事件的三要素

2、注册事件

传统的方法:

方法监听注册方式

俩者的区别:

attachEvent 事件监听方式(了解)

3、解绑事件

4、DOM 的事件

5、事件对象

6、阻止事件冒泡

7、 常见的鼠标键盘事件

7.1 表单事件类型

7.2 鼠标事件类型

7.3 鼠标事件对象

7.4 键盘事件


1、事件的三要素

事件源、事件类型、事件处理程序

2、注册事件

传统的方法:

利用on开头的事件onclick
<button.onclick =“alert(‘hi’)”>
btn.onclick =function(){}

方法监听注册方式

eventTarget.addEventListener(type, listener[,useCapture])

三个参数的含义:
type: 事件的类型 ,如 click 、mouseenter 等 , 是一个字符串型,必须要带引号
listener: 事件执行时触发的函数
useCapture: 可选参数,布尔值 , 默认是 false,代表是冒泡阶段触发 ,ture代表捕获阶段触发

俩者的区别:

onclick :特点① 注册事件的唯一性 ; 同一个元素同一个事件只能设置一个处理函数,最后注册的处理函数将会覆盖前面注册的处理函数

addEventListerner() :  特点 ① 同一个元素添加多个同个事件处理程序

② 缺点 兼容性 IE9 以下不兼容

关于这个不兼容的问题 ,可以使用 attachEvent() ,这个可以解决 ,ie可以使用 , 其他浏览器不行 ,mdn文档中不推荐 。 IE9前可以使用这个方法 。

attachEvent 事件监听方式(了解)

eventTarget.attachEvent(eventNameWithOn, callback)

俩个参数:

eventNameWithOn : 事件型字符串 ,需要加 on ,比如 onclick 、onmouseover

callback : 事件处理函数

也可以自己封装个 兼容性的事件函数

function addEventListener(element,eventName,fn) {
//判断当前浏览器是否支持addEventName方法
if(element.addEventListener(eventName,fn);
//第三个参数默认是false
}else if (element.attachEvent){
element.attachEvent('on'+eventName,fn);
}else{
//相当于element.onclick = fn ;
element['on'+eventName] = fn ;
}

3、解绑事件

传统注册方式

eventTarget.onclick = null 

eventTarget.removeEventListener('click', fn)

这边也可以封装个兼容性的函数

function removeEventListener(element,eventName,fn){
    //判断当前浏览器是否支持removeEventlistener方法
    if( element.removeEventListener){
        element.removeEventListener(event,fn);
    }else if(element.detachEvent){
        element.detachEvent('on'+eventName,fn);
    }else{
        element['on'+eventName] = null;
    }
}

4、DOM 的事件

DOM事件流分为 三个阶段: 1.捕获阶段     2. 当前目标阶段    3. 冒泡阶段

事件冒泡:开始是由具体的元素接受,然后逐级向上传播到DOM最顶层节点的过程
事件捕获:由DOM最顶层节点开始,然后逐级向下传播到最具体的元素的接受过程。

注意点: 

js代码中只能执行捕获或者冒泡其中一个阶段
onclick和attachEvent,只能得到冒泡阶段
addEventListener()第三个参数如果是true,在事件捕获阶段调用事件处理程序;如果是false(不写默认就是false),表示在事件冒泡阶段调用事件处理程序。

5、事件对象

事件对象是我们事件的一系列相关数据的集合,跟事件相关的,比如鼠标点击就包含鼠标坐标,键盘事件的信息,比如判断用户按下哪个键

element.addEventListerner('click',function(e){})

e 就是 事件对象

注意点: e 和 this 的区别 :this 是 事件绑定的元素 , e.target 是事件触发的元素

1、event就是一个事件对象,写到侦听函数小括号里面,可以作为形参来看
2、事件对象只有有了事件才会存在、他是系统自动创建的,不需要我们传参数
3、事件对象不一定要写event,开发中我们一般用e来代替,自定义名字
4、事件对象也有兼容性问题。IE678通过window.event

解决兼容性问题

1、标准浏览器中是浏览器给方法传递的参数,只需要定义形参 e 就可以获取到。

2、在 IE6~8 中,浏览器不会给方法传递参数,如果需要的话,需要到 window.event 中获取查找。
解决:
e = e || window.event;

6、阻止事件冒泡

标准写法:利用事件对象里面的 stopPropagation()方法
e.stopPropagation()
非标准写法:IE 6-8 利用事件对象 cancelBubble 属性
e.cancelBubble = true;

封装的兼容性函数

if(e && e.stopPropagation){
 e.stopPropagation();
}else{
 window.event.cancelBubble = true;
}

7、 常见的鼠标键盘事件

7.1 表单事件类型

input

输入事件,关注输入的过程(value值变,就会触发事件)
change更新事件,关注输入结果(当表单元素失去焦点的时候,观察表单值是否变化,变化则触发事件)
focus获取焦点事件(获得焦点就触发事件)
blur失去焦点事件(失去焦点就触发事件)
submit表单提交事件, 事件目标是form(点击form中的提交按钮触发事件,有时配合取消元素默认行为)
reset重置事件, 事件目标是form ()
select选择事件

7.2 鼠标事件类型

click

鼠标点击左侧触发
dblclick鼠标双击左侧触发
mouseover鼠标经过触发(有冒泡)
mouseenter鼠标经过触发
mouseout鼠标离开触发(有冒泡)
mouseleave鼠标离开触发
focus获取鼠标焦点触发
blur失去鼠标焦点触发
mousemove鼠标移动触发
mouseup 鼠标弹起触发
mousedowm鼠标按下触发

补充俩个: 禁止右键菜单 contextmenu

                   禁止选中文字 selectstart

document.addEventListener('contextmenu', function(e){
    e.preventDefault();
})

document.addEventListener('selectstart', function(e){
    e.preventDefault();
})

7.3 鼠标事件对象

e.clientX / e.clientY返回鼠标相当于浏览器窗口可视区的x / y 坐标
e.pageX / e.pageY返回鼠标相当于浏览器窗口可视区的 x / y 坐标  IE9 +支持
e.screenX / e.screenY返回鼠标相当于电脑屏幕的x坐标   
offsetX/offsetY返回 光标相对于定位父级元素左上角的位置
type返回 当前事件类型

key

返回 用户按下的键盘键的值  现在不提倡使用keyCode

7.4 键盘事件

keyup某个键盘按键被松开时触发
keydown某个键盘按键被按下时触发
keypress某个键盘被按下去触发, 但不识别功能键
  • 三个事件的执行顺序是:keydown   keypress   keyup

三者区别:详情查看:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值