获取事件和处理事件的第二种方式:事件监听

如何获取和处理鼠标与键盘的基本事件?

事件监听方式

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

  • type:事件类型 如click
  • listener:事件处理函数
  • useCapture:布尔值

ie9以前的版本支持

eventTarget.attachEvent()将制定的监听器注册到eventTarget上,当对象触发指定事件时,指定的回调函数就会执行

该方法接收两个参数:

  • eventNameWithOn:事件类型字符串 如onclick
  • callback:事件处理函数,

删除事件

  1. 传统方式

eventTarget.onclick=null;

  1. 方法监听注册方式

eventTarget.removeEventListener(type,listener[,useCapture]);

DOM事件流

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

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

DOM事件流分为3个阶段:

  1. 捕获阶段 自顶向下
  2. 当前目标阶段
  3. 冒泡阶段 从下往上

JS代码只能执行捕获或者冒泡其中一个阶段

onclick和attachment只能得到冒泡阶段

addEventListener第三个参数如果是true,表示在事件捕获阶段调用事件处理程序,如果是false表示在事件冒泡阶段调用

事件对象

div.onclick=function(event) {}

  1. event就是一个事件对象,写到我们的侦听函数里的小括号里面,当形参来看
  2. 事件对象只有有了事件才会存在,它是系统给我们自动创建的,不需要我们传递参数
  3. 事件对象使我们事件的一系列相关数据的集合 跟事件相关的 比如鼠标点击里面就包含了鼠标的相关信息如鼠标坐标等
  4. 事件对象可以自己命名 如evt、e、
  5. 有兼容性问题 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'进入了输入框
  1. 快递单号输入内容时,上面的大盒子显示

  2. 表单检测用户输入:给表单添加键盘事件

  3. 同时把快递单号表单里的值获取过来赋值给盒子

  4. 如果快递单号里面内容为空,则隐藏盒子 con.style.display='none'

  5. 当文本框失去焦点,隐藏盒子

    blur diplay=none

    focus {if this.value!='' display=block}//获得焦点时还需要检测输入是否为空

  6. 注意:此处应该使用keyup,弹起时文字已经在文本框出现了 keydown和keypress触发的时候,文本框的字还没有出现,并不能实现同时放大的效果

JS3-高级事件的更多相关文章

  1. Jquery10 高级事件

    学习要点: 1.模拟操作 2.命名空间 3.事件委托 4.on.off 和 one jQuery 不但封装了大量常用的事件处理,还提供了不少高级事件方便开发者使用.比如模拟用户触发事件.事件委托事件. ...

  2. 第一百七十一节,jQuery,高级事件,模拟操作,命名空间,事件委托,on、off 和 one

    jQuery,高级事件,模拟操作,命名空间,事件委托,on.off 和 one 学习要点: 1.模拟操作 2.命名空间 3.事件委托 4.on.off 和 one jQuery 不但封装了大量常用的事 ...

  3. 第十篇 Integration Services:高级事件行为

    本篇文章是Integration Services系列的第十篇,详细内容请参考原文. 简介在前一篇, we introduced fault tolerance by examining method ...

  4. [译]Stairway to Integration Services Level 10 - 高级事件活动

    介绍 在前一篇文章中我们介绍了故障容差相关的 MaximumErrorCount 和 ForceExecutionResult 属性.  同时我们学习了SSIS Control Flow task e ...

  5. Js高级 事件冒泡

    什么叫事件冒泡 当给父子元素的同一事件绑定方法时,触发了子元素身上的事件,执行完毕之后,也会触发父级元素的相同事件,这种传播机制叫事件冒泡. 取消事件冒泡 Event对象有个属性叫cancelBubb ...

  6. Js高级 事件 对象

    1.事件 浏览器客户端上客户触发的行为都成为事件 所有的事件都是天生自带的,不需要我们我去绑定,只需要我们去触发. 通过obj.事件名=function(){} 事件名:onmouseover onm ...

  7. 【译】第十篇 Integration Services:高级事件行为

    本篇文章是Integration Services系列的第十篇,详细内容请参考原文. 简介在前一篇, we introduced fault tolerance by examining method ...

  8. jQuery事件篇---高级事件

    内容提纲: 1.模拟操作 2.命名空间 3.事件委托 4.on.off 和 one 发文不易,转载请注明出处! 一.模拟操作 在事件触发的时候,有时我们需要一些模拟用户行为的操作.例如:当网页加载完毕 ...

  9. 译:DOM2中的高级事件处理(转)

    17.2. DOM2中的高级事件处理(Advanced Event Handling with DOM Level 2)        译自:JavaScript: The Definitive Gu ...

  10. 【Swing】理解Swing中的事件与线程

    talk is cheap , show me the code. Swing中的事件 事件驱动 所有的GUI程序都是事件驱动的.Swing当然也是. GUI程序不同于Command Line程序,一 ...

随机推荐

  1. 从零开始配置 vim(16)——启动界面配置

    不知道各位小伙伴用过 spacevim 或者 LunarVim 又或者 doomvim 或者其他的什么 vim 配置框架,我们发现他们的启动界面都做的比较好看,而我们默认进入的启动界面则显得比较素了. ...

  2. 基于新浪微博海量用户行为数据、博文数据数据分析:包括综合指数、移动指数、PC指数三个指数

    基于新浪微博海量用户行为数据.博文数据数据分析:包括综合指数.移动指数.PC指数三个指数 项目介绍 微指数是基于海量用户行为数据.博文数据,采用科学计算方法统计得出的反映不同事件领域发展状况的指数产品 ...

  3. C++ Boost库 实现命令行解析

    Boost库中默认自带了一个功能强大的命令行参数解析器,以往我都是自己实现参数解析的,今天偶尔发现这个好东西,就来总结一下参数解析的基本用法,该库需要引入program_options.hpp头文件, ...

  4. 基于AvaloniaUI开发跨平台.NET三维应用:环境搭建

    本文介绍在Vistual Studio 2022中使用Avalonia和集成AnyCAD AvaloniaUI三维控件的的过程. 目录 0 初始化环境 1 创建项目 2 集成AnyCAD Avalon ...

  5. sed文本处理工具常见用法

    sed的全称是stream editor, 表示它是一个流编译器.可以处理文本内容和终端命令的流标准输出,对文本做查找,替换,插入,删除操作. 它是把文件中的内容逐行copy到缓冲区,然后在缓冲区中进 ...

  6. PHP中目录操作函数

      PHP中目录操作函数 1.是否是目录 is_dir 判断给定文件名是否是一个目录 $path = dirname(__FILE___); echo is_dir($path) ? '目录' : ' ...

  7. 深入浅出Java多线程(六):Java内存模型

    引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第六篇内容:Java内存模型.大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在并发编程中,有两个关键问题至关 ...

  8. 记录一则ADG备库报错ORA-29771的案例

    有客户找到我这边咨询,说他们的一套核心ADG库在业务高峰期报错,因为业务做了读写分离,其备库也实际承担读业务,所以备库故障也会对业务产生影响. 这里也要提醒大家,做读写分离,如果读库出现故障的情况,要 ...

  9. 实现阿里云模型服务灵积 DashScope 的 Semantic Kernel Connector

    Semantic Kernel 内置的 IChatCompletionService 实现只支持 OpenAI 与 Azure OpenAI,而我却打算结合 DashScope(阿里云模型服务灵积) ...

  10. JS Leetcode 155. 最小栈 题解分析

    壹 ❀ 引 本题来自LeetCode155. 最小栈,难度简单,题目描述如下: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x ...