webAPI-事件高级

1.绑定事件

2.解绑事件

3.DOM 事件流

4.事件对象

5.事件委托

6.常用的鼠标事件

7.常用键盘事件

1.绑定使事件

  • 传统方式 element.onclick = function () {}
  • addEventListener(‘type’, listener[, userCapture])
    type: 事件类型,如click、mouseover
    listener:事件处理函数
    useCapture:默认false(可选),如果为true则处于捕获阶段

2.解绑事件

  • 传统解绑 element.onclick = null
  • removeEventListener(‘type’, listener[, userCapture])
btn.addEventListener('click', fn)
function fn () {
	alert('adga')
	btn.removeEventListener('click', fn)
}

3.DOM 事件流

  1. 捕获阶段
  2. 当前目标阶段
  3. 冒泡阶段
    只能是捕获阶段或者冒泡阶段。
    有些事件没有冒泡如onblur、onfocus、onmousenter、onmouseleave

冒泡演示:

let son = document.querySelector('.son')
son.addEventListener('click', function () {
	alert('son')
}, false)
let father= document.querySelector('.father')
father.addEventListener('click', function () {
	alert('father')
}, false)

4.事件对象

div.onclick = function(event) {}

event就是一个事件对象,在回调函数形参里,包含了事件的一系列数据集合,如点击事件的事件对象就包含了的鼠标坐标等信息。

事件对象的属性

  • e.target 返回的是触发事件的对象(元素),this 返回的是绑定事件的对象
  • e.type 事件类型,如click
  • e.prenentDefault() 阻止默认行为
  • e.stopPropagation() 标准阻止冒泡,e.cancleBuble = true非标准

5.事件委托

<ul>
	<li>知否知否,应该有弹框在手</li>
	<li>知否知否,应该有弹框在手</li>
	<li>知否知否,应该有弹框在手</li>
	<li>知否知否,应该有弹框在手</li>
	<li>知否知否,应该有弹框在手</li>
</ul>

点击每个li都会弹出对话框,以前需要给每个li注册事件,而且访问DOM的次数越多,这就会延长整个页面的交互就绪时间。

事件委托原理

不是每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点。

以上案例:给ul注册点击事件,然后利用事件对象的target来找到当前点击的li,因为点击li,事件会冒泡到ul上,ul有注册事件,就会触发事件监听器。

事件委托的作用

我们只操作了一次DOM,提高了程序的性能。

const ul = document.querySelector('ul')
ul.addEventListener('click', function (e) {
	alert('123456')
	e.target.style.backgroundColor = 'pink' //点击到的变粉红
})

6.常用的鼠标事件

  • onclick 鼠标点击左键触发
  • onmouseover 鼠标经过触发
  • onmouseout 鼠标离开触发
  • onfocus 获得鼠标焦点触发
  • onblur 失去鼠标焦点触发
  • onmousemove 鼠标移动触发
  • onmouseup 鼠标弹起触发
  • onmousedown 鼠标按下触发

鼠标事件对象

  • e.clientX 鼠标相对于浏览器窗口可视区的x坐标
  • e.clientY 鼠标相对于浏览器窗口可视区的y坐标
  • e.pageX 鼠标相对于文档页面的x坐标 ie9+
  • e.pageY 鼠标相对于文档页面的y坐标 ie9+
  • e.screenX 鼠标相对于电脑屏幕的x坐标
  • e.screenY 鼠标相对于电脑屏幕的y坐标

7.常用键盘事件

  • onkeyup 某个键盘按键被松开时触发
  • onkeydown 某个键盘按键被按下时触发
  • onkeypress 某个键盘按键被按下时触发(不识别功能键如 ctrl、shift、箭头等)

键盘对象

  • e.keycode 键盘对象的ascⅡ码值
    keyup、keydown 不区分按键大小写,即A与a都是一样的值,需要区分时可以用keypress
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值