事件注册 DOM事件流 事件对象(常用属性,方法) 事件委派(鼠标,键盘事件对象)

注册事件概述

给元素添加事件,称为注册事件或者绑定事件

注册事件有两种方式:传统方式和方法监听注册方式

传统注册方式:利用 on 开头的事件;例如:onclick;注册事件的唯一性,后面的注册事件会把前面的覆盖

方法监听注册方式:addEventListener()IE9+;IE9以前用 attacthEvent()代替;会按照注册顺序依次执行没有唯一性的问题

addEventListener() 事件监听方式

eventTarget.addEventListener(type, listener[, useCapture]);
// 事件类型字符串,比如click,不用带on
// listener:事件处理函数
// useCapture:可选参数,是一个布尔值,默认false

解绑事件

// 1. 传统方式
eventTarget.click = null;
// 2. 监听方式移除
div.addEventListener(‘click‘, fn); // 这里的 fn 不需要调用所以不带括号
function fn() {
    // 要移除的事件以及要移除的事件函数
    div.removeEventListener(‘click‘, fn);
}

DOM事件流

事件流描述的是从页面中接收事件的顺序;

事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程就是DOM事件流

DOM事件流分为三个阶段:

  • 捕获:document -> html -> body -> target
  • 目标: target
  • 冒泡:target -> body -> html -> document

有些事件是没有冒泡的,例如:onblur onfocus onmouseenter onmouseleave

onclick 和 attachEvent 只能捕获到冒泡阶段

<div class="father">
  <div class="son"></div>
</div>
var father = document.querySelector(‘.father‘);
var son = document.querySelector(‘.son‘);
// 当第三个参数为 true 的时候 表示是捕获阶段,此时会先触发 father 的 click 事件再触发 son 的;
father.addEventListener(‘click‘, function () {
  alert(‘father‘);
}, true);
son.addEventListener(‘click‘, function () {
  alert(‘son‘);
}, true);
// 当第三个参数为 false 或者为空,表示冒泡阶段,此时会先触发 son 的 click 事件再触发 father 的;
father.addEventListener(‘click‘, function () {
  alert(‘father‘);
}, false);
son.addEventListener(‘click‘, function (e) {
  alert(‘son‘);
  // 但是如果加了这个方法就会阻止事件冒泡行为
  e.stopPropagation();
});

事件对象

eventTarget.onclick = function (event) {};
eventTarget.addEventListener(‘click‘, function (event) {});
  • event对象代表事件的状态,比如键盘按键,鼠标位置等;
  • 事件发生后,跟事件相关的一些列数据的集合都放到了这个对象里面,包含了很多的属性和方法
  • 这个 event 是一个形参,系统已经设定好的对象,不需要传递实参
  • 存在兼容性问题 IE9+, IE6~8 window.event;

事件对象常用属性和方法

事件对象属性方法 说明
e.target; 返回触发事件的对象(元素)
e.srcElement; 返回触发事件的对象 IE 6~8
e.type; 返回事件的类型,比如 click mouseover
e.cancelBubble; 该属性阻止冒泡 IE 6~8
e.reutrnValue; 该属性阻止默认行为, IE 6~8
e.preventDefault(); 该方法阻止默认行为,比如不让链接跳转
e.stopPropagation(); 阻止冒泡

事件委托(代理,委派)

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

比如给ul注册点击事件,然后利用事件的 target 来找到当前点击的 li,因为点击 li 会冒泡到 ul 上, ul有注册事件就会触发监听器;好处是只操作了一次DOM,提高程序性能;

鼠标事件对象

鼠标事件对象 说明
e.clientX; 返回鼠标相对于浏览器可视区域的X坐标
e.clientY; 返回鼠标相对于浏览器可视区域的Y坐标
e.pageX; 返回鼠标相对于文档页面的X坐标 IE 9+
e.pageY; 返回鼠标相对于文档页面的Y坐标 IE 9+
e.screenX; 返回鼠标相对于电脑屏幕的X坐标
e.screenY; 返回鼠标相对于电脑屏幕的Y坐标

常用键盘事件

键盘事件 说明
onkeyup 某个按键被松开时触发
onkeydown 某个按键被按下时触发,优先级高于 onkeypress
onkeypress 某个按键被按下时触发,但是不识别功能键,比如 shift ctrl 等

键盘事件对象

事件对象 说明
keyCode 返回该键的ASCII码值
  • keyup keydown 不区分字母的大小写,只返回大写的 ASCII
  • keypress 区分大小写

原文地址:https://www.cnblogs.com/article-record/p/12593596.html

时间: 2024-08-02 06:56:47

事件注册 DOM事件流 事件对象(常用属性,方法) 事件委派(鼠标,键盘事件对象)的相关文章

selenium鼠标键盘事件(转)

概念 在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是 Actions 类,在使用该类的过程中会配合使用到 Keys 枚举以及 Mouse. Keyboard.CompositeAction 等类. 其次,在实际测试过程中,可能会遇到某些按键没办法使用 Actions.Keys

DOM中document对象的常用属性方法总结

提要: 每个载入浏览器的 HTML 文档都会成为 Document 对象. Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问 1.常见对象属性 document.title                 //设置文档标题等价于HTML的<title>标签document.bgColor               //设置页面背景色document.fgColor               //设置前景色(文本颜色)document.linkColor    

做UI最全的鼠标键盘事件!

在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是ActionChains类,在使用该类做键盘操作的过程中会配合使用到 Keys 数据存储类,Keys包含键盘上所有特殊按键. 一.鼠标点击操作 click(element=None)左击context_click(element=N

由chrome剪贴板问题研究到了js模拟鼠标键盘事件

写在前面 最近公司在搞浏览器兼容的事情,所有浏览器兼容的问题不得不一个人包了.下面来说一下今天遇到的一个问题吧 大家都知道IE下面如果要获得剪贴板里面的信息的话,代码应该如下所示 window.clipboardData.getData("Text") 可是在chrome下面就行不通了,chrome下面没有类似ie的这种方法,那应该怎么办呢,百度了一下,发现还真有办法. 只要在HTML界面上放上一个text类型的控件,如下所示 <textarea id="textAre

Selenese 命令清单 - 鼠标键盘事件控制命令

点击链接加入群[悦分享测试联盟]:https://jq.qq.com/?_wv=1027&k=5DiePik 简介 Selenium为用户提供了大量的Selenese命令,可以非常方便的为用户编写脚本实用,其中实际场景运用需要的并不多,为了能更好的利用这些命令,我对几乎所有Selenese命令做了分类,分类内容如下: 包含操作页面元素常用命令,以及一些不常用到的高级使用命令 对鼠标键盘事件控制命令 wait相关命令 veriy相关命令 assert相关命令 store存储器相关命令 Part I

Python - selenium_WebDriver 鼠标键盘事件

from selenium import webdriver #引入ActionChains类 提供了鼠标的操作方法 from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys from ReadTxt_demo import readTxt import time #鼠标键盘事件 ''' ActionChains 常用方法 per

Linux 模拟 鼠标 键盘 事件

/************************************************************************ * Linux 模拟 鼠标 键盘 事件 * 说明: * 以前看到有些软件能够控制鼠标移动,键盘操作等功能,总想知道这些到底 * 是怎么做到的,好像是2年前也尝试去做这件事,但那时候对知识的匮乏直接导致 * 无法进行,早上突然想到这件事,于是又搜索了一下,鉴于目前经常接触Linux * 驱动,对这些东西的理解也就很容易. * * 2016-2-27 深

DOM访问HTML元素的方式,DOM访问表单控件的常用属性和方法,DOM访问列表框、下拉菜单的常用属性,DOM访问表格子元素的常用属性和方法,DOM对HTML元素的增删改操作

DOM访问HTML元素的方式 为了动态地修改HTML元素,须先访问HTML元素.DOM主要提供了两种方式来访问HTML元素: 根据ID访问HTML元素:通过document对象调用getElementById()方法来查找具有唯一id属性值的元素. 利用节点关系访问HTML元素.常用的属性和方法如下: parentNode 返回当前节点的父节点 previousSibling 返回当前节点的前一个兄弟节点 nextSibling 返回当前节点的后一个兄弟节点 childNodes 返回当前节点的

javascript对象常用的方法

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getS