clientX/Y           可视区的鼠标坐标                  全兼容
offsetX/Y           鼠标坐标到物体边框的距离    IE+Chrome
pageX/Y             页面                                    高级 浏览器
screenX/Y           屏幕                                    全兼容(没用)
var e =  evt || window.event;
evt作为参数兼容高级浏览器,window.event兼容低版本IE;(此处注意属性和变量eg:window.a和a,亲着是undefined,后者是is no difined)
添加事件的方法:
1 赋值的方法 ---document.onclick = function(){};  --->缺点:会覆盖;
取消事件的方法 document.onclick = null;
2 事件绑定------addEventListener(evname,fn,false)/attachEvent('on'+evname,fn);
兼容高级浏览器(false代表冒泡,true代表捕获)        兼容低版本IE(IE事件流只有冒泡)
取消绑定的方法  removeEventListener(evname,fn,false)/detachEvent('on'+evname,fn);
DOM事件必须用时间绑定添加;
注意事件绑定的函数,不能作为匿名函数,而是用函数名来取消绑定
3 事件委托  利用事件冒泡,给父级加事件--->优点:1简化重复的函数代码2给未来的元素加事件
给父级添加事件委托,this变为父级,要通过var oSrc=oEvent.srcElement||oEvent.target;来获取事件源,IE和Chrome兼容srcElement    ,     Firefox Chrome兼容target;Chrome都行
setCapture(),将所有的事件归集捕获给obj
releaseCapture()
取消事件冒泡的方法:
evt.stopPropagation();//非IE
window.event.cancelBubble = true;//IE中   
兼容写法:  window.event ? window.event.cancelBubble = true : evt.stopPropagation();
取消默认事件的方法:
evt.preventDefault();  非IE
window.event.returnValue = false;/return false   IE
return false阻止默认事件,遇到addEventListener会失效
*用preventDefault解决
ready事件
高级浏览器:
document.addEventListener('DOMContentLoaded', function (){
alert('ready');
}, false);

低版本IE:(有interactive 和complete)
document.attachEvent('onreadystatechange', function (){
if(document.readyState=='complete'){
alert('ready');
}

ready 的兼容写法:
function addReady(fn){
if(document.addEventListener){
document.addEventListener('DOMContentLoaded', fn, false);
}else{
document.attachEvent('onreadystatechange', function (){
if(document.readyState=='complete'){
fn();
}
});
}
}

滚轮事件:
wheelDelta      IE、Chrome
上       正
下       负
detail          Firefox
上       负
下       正
//IE、Chrome
/*oDiv.onmousewheel=function (){
alert('a');
};*/

//FireFox——DOMMouseScroll
oDiv.addEventListener('DOMMouseScroll', function (){
alert('a');
}, false);    DOM事件必须用事件绑定

滚轮的兼容写法1
function wheel(ev){
var oEvent=ev||event;
var down;
if(oEvent.wheelDelta){
if(oEvent.wheelDelta<0){
down=true;
}else{
down=false;
}
}else{
if(oEvent.detail<0){
down=false;
}else{
down=true;
}
}
if(down){
alert('向下');
}else{
alert('向上');
}
}
if(window.navigator.userAgent.indexOf('Firefox')!=-1){
oDiv.addEventListener('DOMMouseScroll', wheel, false);
}else{
oDiv.onmousewheel=wheel;
}
}
//wheelDelta      IE、Chrome
//上       正
//下       负
//detail          Firefox
//上       负
//下       正

滚轮写法2 和3
function wheel(ev){
var oEvent=ev||event;
var down;
//down=oEvent.wheelDelta?oEvent.wheelDelta<0:oEvent.detail>0;
down=(oEvent.wheelDelta||-oEvent.detail)<0;
if(down){
alert('向下');
}else{
alert('向上');
}
}
if(window.navigator.userAgent.indexOf('Firefox')!=-1){
oDiv.addEventListener('DOMMouseScroll', wheel, false);
}else{
oDiv.onmousewheel=wheel;
}

关于相等的问题  -->只有字符串是静态的,不可变的;
//alert(12==12);
//alert('abc'=='abc');
//alert([1,2,3]==[1,2,3]);
//alert(new Array(1,2,3)==new Array(1,2,3));
//[1,2,3]   =>    new Array(1,2,3)

//alert(12==12);
//alert('abc'=='abc');
alert({a: 12, b: 5}=={a: 12, b: 5});
//{a: 12, b: 5}   =>    new Object()

//alert(12==12);
//alert('abc'=='abc');
/*var arr=[1,2,3];
arr[1]=4;
alert(arr);*/
var str='abc';
str[1]='d';
alert(str);
只有字符串是静态的,不可变的;

//alert(function (){alert('abc')}==function (){alert('abc')});
alert(new Function("alert('abc')")==new Function("alert('abc')"));
/*var show=function (){
alert('abc');
};*/
//var show=new Function("alert('abc');");
//show();

转载于:https://www.cnblogs.com/gulinsai/p/6959097.html

事件捕获、冒泡、绑定、赋值、委托、兼容、滚轮相关推荐

  1. 浏览器事件捕获冒泡以及阻止冒泡

    浏览器事件捕获冒泡以及阻止冒泡 一.浏览器的dom事件流 dom事件流有三个阶段,捕获阶段->目标阶段->冒泡阶段,不管是有没有绑定事件,只要发生点击事件,事件的处理将从DOM层次的根开始 ...

  2. Mr.J--JS事件监听(捕获冒泡)

    目录 addEventListener 取消绑定事件 removeEventListener 事件捕获&冒泡 事件冒泡 事件捕获 事件捕获和事件冒泡同时存在 1.捕获在前 2.冒泡在前 注意 ...

  3. JavaScript 详说事件流(冒泡、捕获、传播、委托)

    事件流 事件流描述的是从页面中接收事件的顺序. 标准DOM事件流存在三个阶段:事件捕获阶段.处于目标阶段和事件冒泡阶段. 事件捕获:当触发事件时,浏览器会从根节点开始由外到内进行事件传播,即点击了子元 ...

  4. 事件冒泡 vs 事件捕获 vs 事件委托 的区别

    事件冒泡 vs 事件捕获 vs 事件委托 本主要用于理解这JS的这三种事件的专业术语所表述的意义: 在学校,听老师讲解事件冒泡和事件捕获机制的时候跟听天书一样,只依稀记得IE使用的是事件冒泡,其他浏览 ...

  5. Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制

    一.事件的捕获与冒泡 由W3C规定的DOM2标准中,一次事件的完整过程包括三步:捕获→执行目标元素的监听函数→冒泡,在捕获和冒泡阶段,会依次检查途径的每个节点,如果该节点注册了相应的监听函数,则执行监 ...

  6. JavaScript 详说事件机制之冒泡、捕获、传播、委托

    DOM事件流(event  flow )存在三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段. 事件捕获(event  capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会 ...

  7. 事件委托、事件冒泡与事件捕获

    目录 事件委托: 1.原理 2.实现 ①在介绍事件委托的方法之前,我们先来看一段一般方法的例子: ②那么我们用事件委托的方式做又会怎么样呢? ③要是每个li被点击的效果都不一样,那么用事件委托还有用吗 ...

  8. 事件对象,事件流(事件冒泡和事件捕获)、事件委托、L0和L2注册等相关概念及用法

    事件对象 1. 事件对象是什么? 这个对象包含事件触发时的相关信息.如:鼠标点击事件中,事件对象就存了鼠标点击时的位置信息等. 2. 事件对象在哪里? 在事件绑定的回调函数的第一个参数就是事件对象,一 ...

  9. Event事件-1:addEventListener事件监听 / 事件冒泡事件捕获 / 事件委托 / preventDefault 阻止默认行为 / cancelBubble、stopPropa...

    addEventListener 事件监听器 target.addEventListener(type, listener[, options|useCapture])     添加事件监听 参数: ...

最新文章

  1. Python收发邮件
  2. 新增的querySelector、querySelectorAll测试
  3. 什么是视频编码(Codec)?
  4. ThinkPHP调用连连支付
  5. 使用jQuery操作input的value值
  6. java mysql修改表结构字段_【开发技术】java+mysql 更改表字段的步骤
  7. STM32F7xx —— LAN8720(FreeRTOS+LWIP)
  8. ISA2004升级到ISA2006需要注意的事项
  9. flutter怎么手动刷新_Flutter 小技巧实现通用的局部刷新
  10. 把一个整形数组中重复的数字去掉 - 微软面试题
  11. 学会5个数据分析常见定律,数据敏感度提升N个度
  12. kafka是什么_Kafka为什么快到根本停不下来?
  13. java案例代码14-guiJframe简单小案例
  14. 开始菜单单如何打开计算机程序,什么是开始菜单
  15. 文件后缀名查询(全)
  16. 对于微信支付宝支付的总结
  17. 搭建PXE自动安装centos
  18. iPhone4平台上实时音视频对话(经验)
  19. 3.17学堂在线python学习笔记
  20. Java复习五:抽象类+模板设计方法+接口+三种工厂模式

热门文章

  1. ITU-T Technical Paper: QoS的构建模块与机制
  2. 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)...
  3. python武器代码_程序员需要掌握的七种 Python 代码更易维护的武器
  4. 鸿蒙电脑系统什么时候普及,鸿蒙操作系统开源是什么意思?华为鸿蒙系统什么时候能用...
  5. linux安装bash工具包,Linux 资源监视工具BashTop的安装和使用
  6. 档案盒正面标签制作_如何制作差异化的短视频内容?
  7. vscode的IntelliCode扩展报错
  8. 【HNOI2003】【BZOJ1218】激光炸弹
  9. 计算机类专业综合理论模拟试卷4,计算机类专业理论综合考试试题
  10. 任意阶幻方解法及c++实现