JS3-高级事件
获取事件和处理事件的第二种方式:事件监听
如何获取和处理鼠标与键盘的基本事件?
事件监听方式
eventTarget.addEventListener(type,listener[,useCapture])
- type:事件类型 如click
- listener:事件处理函数
- useCapture:布尔值
ie9以前的版本支持
eventTarget.attachEvent()将制定的监听器注册到eventTarget上,当对象触发指定事件时,指定的回调函数就会执行
该方法接收两个参数:
- eventNameWithOn:事件类型字符串 如onclick
- callback:事件处理函数,
删除事件
- 传统方式
eventTarget.onclick=null;
- 方法监听注册方式
eventTarget.removeEventListener(type,listener[,useCapture]);
DOM事件流
事件流描述的是从页面中接收事件 的顺序
事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即DOM事件流
DOM事件流分为3个阶段:
- 捕获阶段 自顶向下
- 当前目标阶段
- 冒泡阶段 从下往上
JS代码只能执行捕获或者冒泡其中一个阶段
onclick和attachment只能得到冒泡阶段
addEventListener第三个参数如果是true,表示在事件捕获阶段调用事件处理程序,如果是false表示在事件冒泡阶段调用
事件对象
div.onclick=function(event) {}
- event就是一个事件对象,写到我们的侦听函数里的小括号里面,当形参来看
- 事件对象只有有了事件才会存在,它是系统给我们自动创建的,不需要我们传递参数
- 事件对象使我们事件的一系列相关数据的集合 跟事件相关的 比如鼠标点击里面就包含了鼠标的相关信息如鼠标坐标等
- 事件对象可以自己命名 如evt、e、
- 有兼容性问题 ie678通过window.event获取事件对象
事件对象常见属性和方法
a.target 返回触发事件的对象(点了谁返回谁) 标准 this返回的是绑定事件的对象
a.currentTarget和this一样,但是只适用于ie9以上(了解即可)
e.srcElement 返回触发事件的对象 非标准 ie6-8常用
e.type 返回事件的类型
- 阻止默认事件 有时候需要阻止链接跳转
a.returnValue; //ie678阻止默认事件的方法 也可以直接用
a.preventDefault(); //阻止默认事件 可以让链接不跳转
return false; //阻止事件跳转(无兼容性问题)
- 冒泡会导致当多个盒子重叠并同时监听时,由于冒泡原理会一层一层执行,因此有时需要考虑阻止冒泡
a.cancelBubble=true; //非标准
a.stopPropagation(); //重点,标准写法,有兼容性问题
事件委托
事件冒泡本身的特性,会带来坏处,也会带来好处,需要我们灵活掌握。
事件委托也称为事件代理,在jQuery里称为事件委派
不要给每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点
例如ul里有很多个li都需要监听事件,可以给ul设定监听器,因为点击li,事件会冒泡到ul上,就会触发事件监听器,可以利用对象的target找到当前点击的li
可以实现找到这个li后改变它的背景颜色,大大简化了代码
作用:
只操作了一次DOM,提高了程序的性能
常用的鼠标事件
鼠标事件
click:单击事件
dblclick:双击事件
mousedown:按下鼠标键时触发
mouseup:释放按下的鼠标键时触发
mousemove:鼠标移动事件
mouseover:移入事件
mouseout:移出事件
mouseenter:移入事件
mouseleave:移出事件
contextmenu:右键事件, 可以使用preventDefault禁用右键菜单
selectstart: 选中事件,可以使用selectstart禁用选中文字(不准复制~)
鼠标事件对象
现阶段主要使用鼠标事件对象和键盘事件对象
clientX,clientY永远是相对于可视窗口的坐标,不会随着滚轮拖动而改变
e.pageX、e.pageY是相对于文档页面的X、Y坐标,IE9+支持
e.screenX、e.screenY相对于电脑屏幕的X、Y坐标
常用键盘事件
键盘事件
onkeyup 某个按键松开
onkeydown 按下时
onkeypress 按下时触发,但是它不识别功能键,比如ctrl、shift、箭头
三个都写时有执行顺序区别,先执行down再执行press然后是up
键盘事件对象
key:‘1’ 直接告诉是哪个键,但是兼容性问题较大
keyCode:可以得到用户按键的ASCii码值
keyup和keydowm事件不区分字母大小写,大写和小写的ASCii码都是小写的码,而keypress区分字母大小写
案例:可以实现按键搜索框自动获取焦点
使用keyCode判断用户是否按下了s键,利用search.focus()实现搜索框获取焦点
最好用keydown判断,防止's'进入了输入框
快递单号输入内容时,上面的大盒子显示
表单检测用户输入:给表单添加键盘事件
同时把快递单号表单里的值获取过来赋值给盒子
如果快递单号里面内容为空,则隐藏盒子 con.style.display='none'
当文本框失去焦点,隐藏盒子
blur diplay=none
focus {if this.value!='' display=block}//获得焦点时还需要检测输入是否为空
注意:此处应该使用keyup,弹起时文字已经在文本框出现了 keydown和keypress触发的时候,文本框的字还没有出现,并不能实现同时放大的效果
JS3-高级事件的更多相关文章
- Jquery10 高级事件
学习要点: 1.模拟操作 2.命名空间 3.事件委托 4.on.off 和 one jQuery 不但封装了大量常用的事件处理,还提供了不少高级事件方便开发者使用.比如模拟用户触发事件.事件委托事件. ...
- 第一百七十一节,jQuery,高级事件,模拟操作,命名空间,事件委托,on、off 和 one
jQuery,高级事件,模拟操作,命名空间,事件委托,on.off 和 one 学习要点: 1.模拟操作 2.命名空间 3.事件委托 4.on.off 和 one jQuery 不但封装了大量常用的事 ...
- 第十篇 Integration Services:高级事件行为
本篇文章是Integration Services系列的第十篇,详细内容请参考原文. 简介在前一篇, we introduced fault tolerance by examining method ...
- [译]Stairway to Integration Services Level 10 - 高级事件活动
介绍 在前一篇文章中我们介绍了故障容差相关的 MaximumErrorCount 和 ForceExecutionResult 属性. 同时我们学习了SSIS Control Flow task e ...
- Js高级 事件冒泡
什么叫事件冒泡 当给父子元素的同一事件绑定方法时,触发了子元素身上的事件,执行完毕之后,也会触发父级元素的相同事件,这种传播机制叫事件冒泡. 取消事件冒泡 Event对象有个属性叫cancelBubb ...
- Js高级 事件 对象
1.事件 浏览器客户端上客户触发的行为都成为事件 所有的事件都是天生自带的,不需要我们我去绑定,只需要我们去触发. 通过obj.事件名=function(){} 事件名:onmouseover onm ...
- 【译】第十篇 Integration Services:高级事件行为
本篇文章是Integration Services系列的第十篇,详细内容请参考原文. 简介在前一篇, we introduced fault tolerance by examining method ...
- jQuery事件篇---高级事件
内容提纲: 1.模拟操作 2.命名空间 3.事件委托 4.on.off 和 one 发文不易,转载请注明出处! 一.模拟操作 在事件触发的时候,有时我们需要一些模拟用户行为的操作.例如:当网页加载完毕 ...
- 译:DOM2中的高级事件处理(转)
17.2. DOM2中的高级事件处理(Advanced Event Handling with DOM Level 2) 译自:JavaScript: The Definitive Gu ...
- 【Swing】理解Swing中的事件与线程
talk is cheap , show me the code. Swing中的事件 事件驱动 所有的GUI程序都是事件驱动的.Swing当然也是. GUI程序不同于Command Line程序,一 ...
随机推荐
- SqlSugar删除数据
1.根据实体删除 1.1 强类型实体 需要配置主键 ,根据主键删除需要给实体配置主键,参考文档实体配置 //单个实体 db.Deleteable<Student>(new Student( ...
- 【三】tensorboard安装、使用教学以及遇到的问题
相关文章: [一]tensorflow安装.常用python镜像源.tensorflow 深度学习强化学习教学 [二]tensorflow调试报错.tensorflow 深度学习强化学习教学 [三]t ...
- 多智能体强化学习算法【三】【QMIX、MADDPG、MAPPO】
相关文章: 常见多智能体强化学习仿真环境介绍[一]{推荐收藏,真的牛} 多智能体强化学习算法[一][MAPPO.MADDPG.QMIX] 多智能体强化学习算法[二][MADDPG.QMIX.MAPPO ...
- WebAssembly入门笔记[4]:利用Global传递全局变量
利用WebAssembly的导入导出功能可以灵活地实现宿主JavaScript程序与加载的单个wasm模块之间的交互,那么如何在宿主程序与多个wasm之间传递和共享数据呢?这就需要使用到Global这 ...
- Gin 中间件
中间件 在Gin框架中,中间件(Middleware)指的是可以拦截http请求-响应生命周期的特殊函数,在请求-响应生命周期中可以注册多个中间件,每个中间件执行不同的功能,一个中间执行完再轮到下一个 ...
- Windows XP Professional with Service Pack 3 (x86)
Windows XP Professional with Service Pack 3 (x86) 链接:https://pan.baidu.com/s/1p99vLx5psoq9K4ONlRpkZA ...
- docker安装oracle数据
docker安装oracle数据库 1️⃣ 通过docker拉取并启动oracle11g(此版本目前主流),docker换源及安装mysql看Springboot创建项目及测试 - $YX$ - 博客 ...
- [FATAL] [DBT-06103] 端口 (1,521) 已在使用
今天参考之前文章 Oracle 19c快速安装部署 在一个新的环境进行安装时,发现配置数据库时报错1521端口被占用: [root@OEL7 media]# /etc/init.d/oracledb_ ...
- Excel 分列功能 帮助 用户 导入Excel
今天遇见一个客户的 Excel有一列 就是 导入不进去 那列 基本都是 数字 我试了下 写入几个字符 就能导入 不写字符的 就是导入 不进去 龚蓼 告诉我 用分列功能 今天试了下 草 果然可以 ...
- Centos7和Centos8的NFS配置
Centos7和Centos8的NFS配置几乎是完全一样的 服务端 Centos7默认安装了rpcbind, nfs-utils, 其中rpcbind的服务默认是启用的, nfs-utils默认是禁用 ...