添加移除函数(removeEventListener)时三个参数保持一致,否则会失败,而且不会有错误提示
var btn = document.getElementById(“myBtn”);
btn.addEventListener(“click”, function(){
    alert(this.id);
}, false);

这样是移除不了的,因为第二个匿名函数并不是同一个,也就是说匿名函数作为handle是无法取消的!

btn.removeEventListener(“click”, function(){             
    alert(this.id);
}, false);
object.onclick = myfunc 等同于 object.addEventListener("click", myfunc, false);
事件默认被添加到冒泡阶段,使用onclick这样方式添加的事件处理被认为是该元素对象的方法,因此this指向该对象,可以获取该元素属性,this.id

如果在HTML中指定了οnclick=""事件,也可以用object.onclick获取,或者object.onclick = null 取消掉
 
 
object.addEventListener("click", myfunc, false);                  // 不需要 on,一个元素添加多个事件会按添加顺序触发
object.attachEvent("onclick", myfunc);                            // 记得要加上on,另外使用这里的this指向的是window对象,而不是元素对象,添加多个事件触发顺序相反,ie 的 attachEvent 的事件处理程序是被引用的,而不是拷贝的,所以this 总是指向 window
btn.onclick = function(){
      alert(window.event.srcElement === this);                           //IE添加事件监听方式不同,结果也不同,应该使用event.srcelement取代this
};
btn.attachEvent(“onclick”, function(event){
      alert(event.srcElement === this);                                      //this指向window
});

object.onclick = myfunc
object.onclick = myfunc2
注意的是DOM Level 0只能添加一个处理函数,后面分配的会取代前面分配的

 
写在元素上的事件可以直接访问元素的attribute属性,上面三种方法都可以
<input type="button" value="haha" οnclick="alert(event.type)">
<input type="button" value="haha" οnclick="alert(this.type)">
<input type="button" value="haha" οnclick="alert(type)">
使用传统委托方式 elem.onclick = function(){} 的话,可以使用 alert(elem.onclick) 看到哪些函数被注册了
而 addeventlistener()  方式注册的看不到,直到DOM3才有一个  eventListenerList  来储存已经注册了的处理函数
 
 
target属性指向触发事件的真正目标,而currenttarget属性指向目前事件处理函数所在的元素
document.body.onclick = function(event){
alert(event.currentTarget === document.body);                                  //true 
alert(this === document.body);                                                        //true 
alert(event.target === document.getElementById(“myBtn”));                //true
};
 
模拟/定制事件:
事件触发器 fireEvent(ie) 和 dispatchEvent ,用来触发某个元素下的某个事件,通常情况是用户操作触发事件的
但有些时候我们需要自定义事件或者在特定情况下触发这些事件,就可以使用事件触发,大概流程如下:
Dom下:
var div = document.getElementById(“myDiv”), event;
EventUtil.addHandler(div, “myevent”, function(event)  {
alert(“DIV: “ + event.detail);
});
EventUtil.addHandler(document, “myevent”, function(event)  {
alert(“DOCUMENT: “ + event.detail);
});
if (document.implementation.hasFeature(“CustomEvents”, “3.0”))  {
event = document.createEvent(“CustomEvent”); 
event.initCustomEvent(“myevent”, true, false, “Hello world!”);
div.dispatchEvent(event);
}
ie下:
var btn = document.getElementById(“myBtn”);
var event = document.createEventObject();                                      //create event object
event.screenX = 100;                                                                    //initialize the event object
event.screenY = 0;
event.clientX = 0;
event.clientY = 0;
event.ctrlKey = false;
event.altKey = false;
event.shiftKey = false;
event.button = 0; 
btn.fireEvent(“onclick”, event);                                                          //fire the event
应该使用CustomEvent来定制事件:
https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent
 

事件委托:

var EventUtil = {

addHandler: function(element, type, handler){

if (element.addEventListener){

element.addEventListener(type, handler, false);

} else if (element.attachEvent){

element.attachEvent(“on” + type, handler);

} else {

element[“on” + type] = handler;

}

},
removeHandler: function(element, type, handler){

if (element.removeEventListener){

element.removeEventListener(type, handler, false);

} else if (element.detachEvent){

element.detachEvent(“on” + type, handler);

} else {

element[“on” + type] = null;

}

}
};
ie使用专用的事件处理机制 然而DOM规定的是另外一种,不一样,以下为取得事件信息方法:
EventUtil.getEvent = function()  {
if (window.event) {
return this.formatEvent(window.event);
} else {
return EventUtil.getEvent.caller.arguments[0];
}
};
实现实现事件委托另一种思路   apply()    call()
 
Dom3新增的事件属性和方法:
stopImmediatePropagation和stopPropagation()方法区别在于前者除了组织事件继续捕获或者冒泡之外,还会阻止其他事件处理函数运行
trusted属性为true表示事件由浏览器产生,false表示事件由开发者javascript代码触发
eventPhase属性指出事件在哪个阶段触发,1表示捕获阶段,2表示at the target,3表示冒泡阶段
var btn = document.getElementById(“myBtn”); 
btn.onclick = function(event){
alert(event.eventPhase);                                                //2
};
等于2的时候,this,target,currenttarget相等
document.body.addEventListener(“click”, function(event){
alert(event.eventPhase);                                                 //1
}, true);
document.body.onclick = function(event){
    alert(event.eventPhase);                                                      //3
};
Dom3弃用了keypress事件
HTML5事件:
contentmenu事件,右键出现菜单事件,preventDefault()可以组织默认菜单弹出,用自己做的菜单替换
beforeunload事件,在unload事件之前触发,可以用于在用户推出之前确认,event.returnValue=“真的要离开了么?”可以设置确认的文字
DOMContentLoaded事件当dom加载完成就立刻触发,不用等images, JavaScript files, CSS files, or other such resources,不支持的话用setTimeout(function(){},0)来模拟
hashchange事件,当URL的hash值改变时触发
readystatechange,用来提供document或者元素加载状态信息,所有支持该事件的元素都有一个readyState属性,用来目前判断加载状态
触屏设备事件:
不支持双击事件,因为那是放大缩小,无法覆盖默认行为。
点击一个带有点击事件的元素或默认可点击的元素例如链接,会触发mousemove事件。如果点击后内容不改变就会触发mousedown,mouseup,click,如果内容改变不会触发那些事件了。
mousemove事件同时触发mouseover,mouseout
mousewheel和scroll事件当两个手指在屏幕上滑动页面时触发
指南针

orientationchange 事件在IOS设备上支持,检测手机的摆放状态,其中window.orientation属性0竖着,90向左转90度,-90向右转90度,因为这是window的事件,因此可以在body上用onorientationchange属性触发

火狐提供了一个 MozOrientation 事件,但这个事件可能将来会被取代
deviceorientation 事件监听window对象,当设备有加速器的时候可用,主要目的是提供设备目前的朝向信息,而不是运动信息。通过三个轴来判断:
当deviceorientation 事件被触发的时候,它会有五个属性:
alpha: 以设备坐标系z轴为轴,旋转alpha度。alpha的作用域为[0, 360)。
beta:以设备坐标系x轴为轴,旋转beta度。beta的作用域为[-180, 180)。
gamma:已设备坐标系y轴为轴,旋转gamma度。gamma的作用域为[-90, 90)。
absolute:返回一个布尔值,反映设备是否返回绝对值。
compassCalibrated:返回一个布尔值,反映设备的罗盘是否校准了
devicemotion 事件用来检测设备运动情况,例如手机正在下落或者被人拿着走路。有四个属性值:
acceleration — An object containing x, y, and zproperties that tells you the acceleration in each dimension without considering gravity.
accelerationIncludingGravity  — An object containing x, y, and zproperties that tells you the acceleration in each dimension, including the natural acceleration of gravity in the z-axis.
interval  — The amount of time, in milliseconds, that will pass before another devicemotionevent is fired. This value should be constant from event to event.
rotationRate  — An object containing the alpha, beta, and gammaproperties that indicate device orientation.
使用前需要检测是否为null,因为不一定能提供相应数据                                                                                                              //fire the event
// 横屏监听
var updateOrientation = function() {
if(window.orientation=='-90' || window.orientation=='90'){
$('.landscape-wrap').removeClass('hide');
console.log('为了更好的体验,请将手机/平板竖过来!');
}else{
$('.landscape-wrap').addClass('hide');
console.log('竖屏状态');
}
};
window.onorientationchange = updateOrientation;

转载于:https://www.cnblogs.com/chuangweili/p/5166254.html

事件 event相关推荐

  1. C#事件(event)解析

    原文:http://www.cnblogs.com/michaelxu/archive/2008/04/02/1134217.html 事件(event),这个词儿对于初学者来说,往往总是显得有些神秘 ...

  2. python 同步 事件 event 简介

    目录 1. Event 1.1 set() 1.2 wait() 1.3 clear() 1.4 is_set() 2. 协调线程同步 3. 一个更复杂的例子 事件 Event是另一种python多线 ...

  3. 秒杀多线程第六篇 经典线程同步 事件Event

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇 一个经典的多线程同步问题> <秒杀多线程第五篇 经典线程同步关键段CS> 上一篇中使用关键段来解决经典的多线程同步互斥问题 ...

  4. [数据库] Navicat for MySQL事件Event实现数据每日定期操作

    在我们操作数据库过程中,通常会遇到一些某个时间点操作数据库的问题,例如:         (1).每天凌晨12点对数据库进行定时备份,结算和汇总:         (2).每天凌晨2点删除数据库前三天 ...

  5. C#总结(二)事件Event 介绍总结

    最近在总结一些基础的东西,主要是学起来很难懂,但是在日常又有可能会经常用到的东西.前面介绍了 C# 的 AutoResetEvent的使用介绍, 这次介绍事件(event). 事件(event),对于 ...

  6. 线程queue、事件event及协程

    线程queue.事件event及协程 线程queue 多线程抢占资源,让其保持串行的两种方式: ​ 1.互斥锁 ​ 2.队列 线程队列分为以下三种: 1.Queue(先进先出) import queu ...

  7. 事件EVENT,WaitForSingleObject(),WaitForMultipleObjecct()和SignalObjectAndWait() 的使用(上)

    用户模式的线程同步机制效率高,如果需要考虑线程同步问题,应该首先考虑用户模式的线程同步方法.但是,用户模式的线程同步有限制,对于多个进程之间的线程同步,用户模式的线程同步方法无能为力.这时,只能考虑使 ...

  8. Python 线程事件 Event - Python零基础入门教程

    目录 一.Python 线程事件 Event 函数介绍 二.Python 线程事件 Event 原理 三.Python 线程事件 Event 使用 四.重点总结 五.猜你喜欢 零基础 Python 学 ...

  9. 事件EVENT与waitforsingleobject的使用以及Mutex与Event的区别

    Mutex与Event控制互斥事件的使用详解最近写一程序,误用了Mutex的功能,错把Mutex当Event用了.[Mutex]使用Mutex的主要函数:CreateMutex.ReleaseMute ...

  10. JS-图片其他事件-Event对象-事件委托-DOM对象

    JS-图片其他事件-Event对象-事件委托-DOM对象 1 回顾 1. 事件回调函数中 this 的指向2. 鼠标事件click dblclick contextmenumouseenter mou ...

最新文章

  1. Scrum vs Kanban,如何选择?
  2. 我如何进入Docker容器的shell?
  3. c++ 低位在前 高位在后_生意社:醋酸市场前三季度区间震荡 四季度一飞冲天
  4. 安装python38_debian8安装python3.7
  5. matlab 工业相机 曝光时间_CCD高清工业相机的主要参数及应用
  6. final方法覆盖与重载问题以及不同访问权限问题
  7. 少走弯路,给3~5年程序员的唯一一条建议
  8. 346雷达有多少tr组件_有源相控阵的天线设计的核心:T/R组件
  9. Linux下Node.js安装及环境配置
  10. CentOS node,npm,cnpm 环境部署
  11. nor flash与nand flash启动的简单比较--APPLE的ARM学习笔记一
  12. java json处理入门
  13. 【渝粤教育】广东开放大学 集体谈判与集体合同 形成性考核 (30)
  14. 计算机信息系统安全管理包括什么,计算机信息系统的运行安全包括什么
  15. 浅谈机器学习-回归与分类的区别
  16. 基于GCN和句法依存分析的情感分析
  17. 4_竞赛无人机基本自动飞行支持函数与导航控制函数解析——零基础学习竞赛无人机搭积木式编程
  18. Dota 游戏中的攻击与伤害分析
  19. CSS3回炉计划-编码技巧
  20. 【论文阅读】ICRA2021: VDB-EDT An Efficient Euclidean Distance Transform Algorithm Based on VDB Data Struct

热门文章

  1. Ubuntu下安装-有道词典
  2. ❤️java多线程并发编程入门 教程合集❤️
  3. 区块链 智能合约安全 重入攻击(re-entrancy attack)DAO incident
  4. Go 并发 多线程 goroutine channel 实例
  5. FISCO BCOS PBFT是什么 基础流程
  6. kubernetes视频教程笔记 (24)-存储-PV和PVC
  7. Spring学习(二)代理模式(静态代理、动态代理)、Spring AOP
  8. JDBC14 ORM03 JavaBean封装
  9. java中的url进行编码和解码
  10. 简述旋转编码器的工作原理_绝对值编码器工作原理以及故障处理方法有哪些?...