13、Event事件

Event事件

事件是可以被JavaScript侦测到的行为。网页中的每个元素都可以产生某些可以触发JavaScript函数的事件。?事件是一瞬间触发。

一、 事件绑定方式

DOM节点绑定(格式):节点.on+事件名 = 事件处理函数;

1、DOM节点绑定
(1)同名事件会被覆盖(2)事件处理函数只能冒泡阶段执行div.onclick = function(){}
2、作为html属性(不常用,不实用)
<div onclick="sum()"></div> 不常用,不实用。
3、事件监听器
(1)同名事件不会被覆盖(2)事件处理函数默认冒泡阶段执行

二、事件分类

(一)、鼠标事件

1、onclick ==> (onclick = onmousedown + onmouseup)
当用户点击某个对象时调用的事件
(2) ondblclick ==> 双击
* ondblclick = onclick*2 当用户双击某个对象时调用的事件
(3)onmousedown ==> 鼠标按钮被按下。
(4)onmouseup ==> 鼠标按键被松开。
(5)onmouseover ==> 鼠标移到某元素之上。
(5)onmouseenter ==> 鼠标移到某元素之上。(这个事件不冒泡)
(6)onmouseout ==> 鼠标从某元素移开。
(6)onmouseleave ==> 鼠标从某元素移开。(这个事件不冒泡)
(7)onmousemove ==> 鼠标被移动时触发。
(8)oncontextmenu ==> 鼠标右键菜单展开时触发。

(二)、键盘事件

(1) onkeydown ==> 某个键盘按键被按下。
(2) onkeyup ==> 某个键盘按键被松开。
(3) onkeypress ==> 键盘<字符键>被按下,而且如果按住不放的话,会重复触发此事件。

(三)UI事件

(1) onload ==> 页面元素(包括图片多媒体等)加载完成后
(2) onscroll ==> 滚动时触发。
(3) onresize ==> 窗口或框架被重新调整大小

(四)表单事件

(1) onselect ==> 输入框文本被选中。
(2) onblur ==> 元素失去焦点时触发。
(3) onfocus ==> 元素获得焦点时触发。
(4) onchange ==> 元素内容被改变,且失去焦点时触发。
(5) onreset ==> 重置按钮被点击。
(6) onsubmit ==> 确认按钮被点击。
(7) oninput ==> 输入字符时触发

三、event对象

(兼容ie浏览器 e = e||window.event)

兼容写法,一般直接给e赋值再用:e = e || window.event;

1、作用:监听事件执行过程中的状态,用来保存当前事件的信息
2、event对象的属性

(一)与鼠标相关的

1、 鼠标按键
(1.1)、鼠标按键       *button  返回当事件被触发时,哪个鼠标按键被点击。    * 标准浏览器:0,1,2(左,滚,右)    * IE8-(IE8以下的浏览器)1鼠标左键, 2鼠标右键, 3左右同时按, 4滚轮, 5左键加滚轮, 6右键加滚轮, 7三个同时    ?
 1   例:<div id="output"></div>
 2     var output = document.getElementById("output");
 3     output.onmousedown = function(e){
 4                 if(e.button == 0){
 5                     output.innerHTML = "开火";
 6                 }else if(e.button == 1){
 7                     output.innerHTML = "切枪";
 8                 }else if(e.button == 2){
 9                     output.innerHTML = "开镜";
10                 }
11             }
2、光标位置信息
(1) clientX /clientY ==> 可视区域的位置
1 光标相对于浏览器可视区域的位置,也就是浏览器坐标。
2 document.onmousemove = function(e){     output.children[0].innerHTML = "client:"+e.clientX+‘,‘+e.clientY;
3 }
(2) screenX /screenY ==> 电脑屏幕
1 光标指针相对于电脑屏幕的水平/垂直坐标
2 document.onmousemove = function(e){     output.children[1].innerHTML = "screen:"+e.screenX+‘,‘+e.screenY;
3 }
(3)pageX /pageY ==> 与滚动关联
* 鼠标相对于文档的位置    * 包括滚动条滚动的距离,即:e.clientX+window.scrollX* IE8-不支持
1 document.onmousemove = function(e){     output.children[2].innerHTML = "page:"+e.pageX+‘,‘+e.pageY;
2 }
(4)offsetX/offsetY ==>光标相对偏移量
* 光标相对于事件源对象左上角相对偏移量。* 事件源对象:触发事件的对象

(二)event与键盘有关的属性

1、 which/(event.which)

keyCode ==> (IE8)

兼容写法 var e.which = e.which || e.keyCode

* 对于keypress事件,该属性声明了被敲击的键生成的 Unicode 字符码(ASCII码)* 对于keydown和keyup事件,它**指定了被敲击的键的虚拟键盘码**。虚拟键盘码可能和使用的键盘的布局相关。
2、ctrlKey ==> CTRL 键
* 当事件被触发时,CTRL 键是否被按下。返回值为布尔值
3、 altKey ==> Alt键
* 当事件被触发时,Alt键是否被按下。返回值为布尔值
4、 shiftKey ==> Shift键
* 当事件被触发时,Shift键是否被按下。返回值为布尔值
案例:愤怒的小鸟
 1 //键盘按下,根据上下左右移动小鸟
 2 document.onkeydown = function(e){
 3 // 1.获取小鸟当前位置
 4 var top = bird.offsetTop;
 5 var left = bird.offsetLeft;
 6 //2.初始化速度及类名变量
 7 var speed = 10;
 8 var className = ‘‘;
 9 // 3.判断按下上下左右方向键,设置left值及类名变量值
10 switch(e.keyCode){ case 37:left -= speed; className = ‘‘; break; //同理其他方向    }
11 // 4.通过变量值,设置bird的位置,及类名
12 bird.style.left = left + ‘px‘;
13 bird.style.top = top + ‘px‘;
14 bird.className = className;}
两个按键同时按的案例
1 document.onkeydown = function(e){
2                 if(e.ctrlKey && e.which == 66){
3                     alert("打开背包,拿出意大利炮");
4                 }
5             }
6 ?

四、事件冒泡

1、涵义

在一个对象上触发某类事件(如onclick事件),那么事件就会沿着DOM树向这个对象的父级传播,从里到外,直至事件到达了最顶层(document/window)

2、阻止事件冒泡 ==> event.stopPropagation()

1 例: erzi.onclick = function(e){
2                 console.log("erzi");
3                 e.stopPropagation();
4             }

3、事件委托

(1)、涵义

* 利用事件冒泡原理,把本来绑定给某个元素的事件委托给它的父级(已经存在页面元素)处理。

(2)影响页面性能的三大操作
(1) 频繁操作dom节点(2) 过多的事件绑定(3) 页面请求过多
(3)事件源对象:获取到触发事件的元素 (event.target)

备注:兼容写法 var target = e.target || e.srcElement

五、阻止浏览器默认行为

  1. 链接跳转
  2. 表单提交
  3. 右键菜单
  4. 文本的选择
标准:event.preventDefault();兼容:e.preventDefault ? e.preventDefault(): e.returnValue = true;IE8-:event.returnValue = false;
 1 案例:自定义右键菜单
 2  window.onload = function(){
 3             // 1.获取菜单,鼠标右键展开时,触发函数:出现菜单,跟随光标位置
 4             // 2.取消默认行为
 5             // 3.点击空白区域,隐藏菜单
 6             // 4.点击菜单里面的li,将文字呈现在txt里面.点击菜单里面的span,将li的文本呈现在txt里面
 7             var contextMenu = document.getElementsByClassName("contextMenu")[0];
 8             var txt = document.getElementsByClassName("txt")[0];
 9             document.oncontextmenu = function(e){
10             e = e || window.event;
11                 e.preventDefault();
12                 contextMenu.style.display = "block";
13                 contextMenu.style.left = e.pageX + ‘px‘;
14                 contextMenu.style.top = e.pageY + ‘px‘;
15             }
16             document.onclick = function(e){
17               e = e || window.event;
18                 if(e.button == 0){
19                     contextMenu.style.display = "none";
20                 }
21             }
22             contextMenu.onclick = function(e){
23                 // e.target 触发事件的对象
24                 if(e.button == 0){
25                     if(e.target.tagName  == "LI"){
26                         txt.value = e.target.innerText;
27                     }else if(e.target.tagName == "SPAN"){
28                         txt.value = e.target.innerText;
29                     }
30                 }
31             }
32
33         }

六、事件捕获(反冒泡)

1、事件的执行阶段:事件冒泡、事件捕获,先捕获再冒泡

2、同一元素的同一事件只能在其中一个阶段执行

3、默认情况下,事件的执行都是默认在冒泡阶段执行

4、事件的传播:

(1)事件冒泡:从下往上
(2)事件捕获:从上往下
*监听器1、标准浏览器:元素.addEventListener(事件名,事件处理函数,是否捕获(默认false,为冒泡))
例:target.addEventListener("click", fn, false);
2、IE8-:元素.attachEvent(on+事件名,事件处理函数)
例:target.attachEvent("on"+"click",fun);
?备注:- 可以绑定多个处理函数在一个对象上, 执行顺序按照绑定的顺序来(标准)  - 不同元素事件执行顺序跟html结构有关  - 相同元素事件执行顺序跟绑定先后有关- 可以绑定多个函数在一个对象上, 执行顺序按照绑定的反序(ie8-)

七、事件的绑定方式

1、html属性[onclick="函数名(实参)"] 不推荐使用,维护不方便,调用数据困难

2、"on"+type :

* ele.onclick = 函数名;* ele.onclick = function(){}* 只能在冒泡阶段执行,只能给同一个元素绑定一个相同事件

3、事件监听器

1、可以绑定多个处理函数在一个对象上, 执行顺序按照绑定的顺序来(标准)  (1.1)不同元素事件执行顺序跟html结构有关  (1.2)相同元素事件执行顺序跟绑定先后有关2、可以绑定多个函数在一个对象上, 执行顺序按照绑定的反序(ie8-)
(1) ele.addEventListener(type,fn,isCapture) ==>标准浏览器
* type 事件类型* fn 函数* isCapture 是否捕获,若为true为捕获阶段,默认为false冒泡阶段* 允许给同一个元素添加多个相同事件
(2) ele.attachEvent("on"+type,fn) ==> ie8-不支持捕获

封装:绑定事件,兼容浏览器

 1 function bind(ele,type,fn,isCapture){
 2     // 优先使用事件监听器
 3     if(ele.addEventListerner){
 4         // 标准浏览器
 5         ele.addEventListerner(type,fn,isCapture);
 6     }else if(ele.attachEvent){
 7         // IE8-
 8         ele.attachEvent(‘on‘ + type,fn);
 9     }else{
10         // DOM节点绑定方式
11         ele[‘on‘ + type] = fn
12     }
13 }

4、取消事件绑定

(1) ele["on"+ type] = null
1  例:ele.onclick = null
(2) ele.removeEventListener(type,fn) ==> 标准
移除事件的函数与添加事件的函数必须是同一个,才可以移除,否则不能移除事件
(3) ele.detachEvent("on"+type,fn) ==> IE8
 传入的参数fn要跟添加时一样,否则不能移除事件

八、拖拽的思路

 1 原理:鼠标按下且移动鼠标时,改变当前元素的top,left值
 2 //给目标元素添加onmousedown事件
 3 //- 拖拽的前提是目标元素设置css定位
 4 //- 记录按下鼠标位置与元素左上角的偏移量offsetX,offsetY
 5 box.onmousedown = function(e){
 6     var ox = e.offsetX;
 7     var oy = e.offsetY;
 8     //当onmousedown发生以后,此刻给document添加onmousemove事件
 9     // - 意味着此刻鼠标在网页的移动都将改变目标元素的位置
10     // - 目标元素的left = 鼠标的pageX – ox
11     // - 目标元素的top = 鼠标的pageY– oy
12     document.onmousemove = function(e){
13         box.style.left = e.pageX - ox + ‘px‘;
14         box.style.top =  e.pageY - oy + ‘px‘;
15     }
16 }
17 //给目标元素或者document(效果有差异)添加onmouseup事件,清空document的onmousemove事件
18 document.onmouseup = function(){
19     document.onmousemove = null;
20 }
21  

原文地址:https://www.cnblogs.com/wulongke/p/10493263.html

时间: 2024-10-26 02:28:47

13、Event事件的相关文章

13 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件  queue队列 生产者消费者模型 Queue队列 开发一个线程池

本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池 操作系统发展史 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式. 手工操作程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把

第13章 事件

JavaScript 与HTML 之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间.可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代码.这种在传统软件工程中被称为观察员模式的模型,支持页面的行为(JavaScript 代码)与页面的外观(HTML 和CSS 代码)之间的松散耦合. 13.1 事件流 事件流描述的是从页面中接收事件的顺序.IE 的事件流是事件冒泡流,而Netscape Communicator 的事件流是事件捕获流. 13.1.1

trigger()的event事件对象之坑

问题引入,先贴一段有问题的代码,如果你对 trigger()  这个函数了解不透彻,还真看不出这段代码错在哪.完成的功能是样式转换器,想让页面在加载后自行触发点击事件隐藏三个按钮,但是效果如图并没有隐藏按钮们:控制台会报错: target  属性是 undefined ,肯定是 event 这个事件对象没获取到的问题,程序到17行出错停止,这让我感到疑问:自定义触发的事件难道没有event对象吗?. 1 <div id="switcher" class="switche

简单总结焦点事件、Event事件对象、冒泡事件

每学习一些新的东西,要学会复习,总结和记录. 今天来简单总结一下学到的几个事件:焦点事件.Event事件对象.冒泡事件 其实这几个事件应该往深的说是挺难的,但今天主要是以一个小菜的角度去尝试理解一些基本的知识点. 1.焦点事件: 1.1概念理解: 想象场景:当一堆text文本框出现在面前,当点击其中一个文本框,它就会响应用户,并出现光标闪动(这时,点击令它获得焦点). 所以说:焦点事件是用来让浏览器区分哪一个对象是用户要进行操作(输入值.选择.跳转)的. 总结===>  浏览器(区分)哪一个对象

JS学习笔记9之event事件及其他事件

-->鼠标事件-->event事件对象-->默认事件-->键盘事件(keyCode)-->拖拽效果 一.鼠标事件 onclick ---------------鼠标点击事件oncontextmenu------鼠标右键点击onmouseover --------鼠标移上onmouseout ---------鼠标移出onmousedown -------鼠标按下onmousemove -------鼠标移动onmouseup ----------鼠标抬起 1 <head

13章 事件

发展 IE3和Netscape Navigator2    :       作为分担服务器负载的一种手段: IE4和Naviscape4    :    提供了相似却不相同的API: DOM2规范制定    :    开始尝试标准化DOM事件: DOM2实现    :    IE9.Firefox.Opera.Safari和Chrome全部实现‘DOM2级事件’核心部分: DOM3级出现    :    API变得更加繁琐. 13.1    事件流   13.1.1    事件冒泡    : 

CDI(Weld)高级&lt;4&gt; Event(事件) (转)

目录[-] 1. Event payload(事件的有效载入) 2. Event observers(event的观察者) 3. Event producers(event生产者) 4.AnnotationLiteral动态注入对应事件 5.Conditional observer methods 6.Event qualifiers with members 7.Multiple event qualifiers 8.事务性处理的transactional observers DEMO A:

C# 知识回顾-Event事件

昨天,通过<C# 知识回顾 - 事件入门>介绍了事件的定义及简单用法,今天我们通过控制台来看下"发布 - 订阅"的基本用法. 发布基于 .NET 类库的事件 采用 EventHandler 模式发布事件 一个简单的发布订阅 Demo 实现自定义事件访问器 一.发布基于 .NET 类库的事件 .NET类库中的所有事件均基于 EventHandler 委托,定义如下: public delegate void EventHandler(object sender, EventA

javascript权威指南第13章 事件示例代码

html 部分 <!DOCTYPE html> <html> <head> <title>Event Bubling Example</title> </head> <body> <!--事件冒泡 与事件捕捉 顺序相反--> <!--事件冒泡 1 <div> 2 <body> 3 <html> 4 document --> <!--事件捕捉 1.docume