7.事件深入

7.1.事件捕获

事件流分为事件冒泡和事件捕获两种,事件冒泡指事件从里往外传播,而事件捕获刚好相反,指事件从外向內传播

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
#box1{
width: 600px;
height: 400px;
background-color: black;
margin: 100px auto;
border: 1px solid
}
#box2{
width: 400px;
height: 200px;
margin: 100px auto;
background-color: orangered;
border: 1px solid
}
#box3{
width: 200px;
height: 100px;
margin: 50px auto;
background-color: #009f95
}
</style>
</head>
<body>
<div id="box1">
<div id="box2">
<div id="box3"></div>
</div>
</div>
<script>
var oBox1 = document.getElementById("box1")
var oBox2 = document.getElementById("box2")
var oBox3 = document.getElementById("box3") function fn(){
alert(this.id)
} oBox1.onclick = fn;
oBox2.onclick = fn;
oBox3.onclick = fn; // 事件绑定的另外一种形式
// addEventListener 第一个参数是 事件名称,第二个参数是事件处理函数,第三个参数表示 是否捕获
// true表示捕获 false表示不捕获,捕获就是冒泡
// 下面是事件冒泡的写法
// oBox1.addEventListener('click',fn,false)
// oBox2.addEventListener('click',fn,false)
// oBox3.addEventListener('click',fn,false)
// 下面是事件捕获的写法
oBox1.addEventListener('click',fn,true)
oBox2.addEventListener('click',fn,true)
oBox3.addEventListener('click',fn,true) </script>
</body>
</html>

7.2.事件绑定形式总结

第一种写法,直接绑定在元素身上

 <div id="box" onclick="fn(this)"></div>
<script>
function fn(obj){
alert(obj.id)
}
</script>

第二种写法 对象.事件 = 事件处理函数

 <div id="box" ></div>
<script>
var oBox = document.getElementById("box")
oBox.onclick = function(){
alert(this.id)
}
</script>

注意: 这种写法有个问题就是,如果同时绑定两个事件处理函数,后面的会把前面的覆盖,例如:

 <div id="box" ></div>
<script>
var oBox = document.getElementById("box")
oBox.onclick = function(){
alert(this.id)
}
oBox.onclick = function(){
alert("nodeing.com")
}
</script>

第三种写法:addEventListener

<div id="box" ></div>
<script>
var oBox = document.getElementById("box") oBox.addEventListener("click", function(){
alert(this.id)
}, false) oBox.addEventListener('click', function(){
alert("nodeing.com")
}, false) </script>

注意:这种写法在ie上有兼容性问题,因此,可以封装一个兼容性处理函数

function addEvent(obj, type, fn){
if(obj.addEventListener){
obj.addEventListener(type, fn, false);
} else if(obj.attachEvent){
obj.attachEvent('on' + type, fn);
} else {
obj['on' + type] = fn;
}
}

7.3.事件取消

function removeEvent(obj, type, fn){
if(obj.removeEventListener){
obj.removeEventListener(type, fn, false);
} else if(obj.detachEvent){
obj.detachEvent('on' + type, fn);
} else {
obj['on' + type] = null;
}
}

7.4.事件默认行为

如果是通过 对象.onclick = fn 这种形式来绑定的, 可以直接在事件处理函数中return false来取消

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
#box{
height: 200px;
width: 100px;
background-color: orangered;
position: absolute;
display: none
}
</style>
</head>
<body>
<div id="box" ></div>
<script>
var oBox = document.getElementById("box")
document.oncontextmenu = function(ev){
var ev = ev || event
oBox.style.display = "block"
oBox.style.left = ev.clientX + "px"
oBox.style.top = ev.clientY + "px"
// 取消事件默认行为
return false
} document.onclick = function(){
oBox.style.display = "none"
} </script>
</body>
</html>

如果是通过addEventListener这种形式来绑定的,需要通过 ev.preventDefault()这种形式来取消

document.addEventListener("contextmenu", function(ev){
var ev = ev || event
oBox.style.display = "block"
oBox.style.left = ev.clientX + "px"
oBox.style.top = ev.clientY + "px"
// return false
ev.preventDefault()
}, false)

螺钉课堂视频课程地址:http://edu.nodeing.com

DOM-BOM-EVENT(7)的更多相关文章

  1. BOM基础(四)

    最近写的文章感觉内容不像之前那么充实,内容可能也有点杂.对于DOM,和BOM来说,要理解是不难的,难的是做的时候.要自己想的到,而且,对于目前阶段来说,BOM还存在着很大的兼容性问题,最主要就是要兼容 ...

  2. DOM 事件深入浅出(二)

    在DOM事件深入浅出(一)中,我主要给大家讲解了不同DOM级别下的事件处理程序,同时介绍了事件冒泡和捕获的触发原理和方法.本文将继续介绍DOM事件中的知识点,主要侧重于DOM事件中Event对象的属性 ...

  3. JavaScript DOM动态创建(声明)Object元素

    http://www.cnblogs.com/GuominQiu/archive/2011/04/01/2002783.html 一文提及“等整个页面加载完毕后,根据用户所选的阅读机类型,再用Java ...

  4. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

  5. c#中的delegate(委托)和event(事件)

    c#中的delegate(委托)和event(事件) 一.delegate是什么东西? 完全可以把delegate理解成C中的函数指针,它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能 ...

  6. js的DOM操作整理(整理)

    js的DOM操作整理(整理) 一.总结 一句话总结: dom操作有用原生js的dom操作,也可以用对js封装过的jquery等插件来更加方便的进行dom操作 1.dom是什么? 对于JavaScrip ...

  7. DOM学习笔记(二)对象方法与属性

    所有 HTML 元素被定义为对象,而编程接口(对象的访问)则是对象方法和对象属性. 事实上,常用的只用window对象及其子对象document对象,以及事件Event对象. Window 对象 Wi ...

  8. DOM之事件(一)

    DOM事件,就是浏览器或用户针对页面可以做出的某种动作,我们称这些动作为DOM事件.它是用户和页面交互的核心.当动作发生(事件触发)时,我们可以为其绑定一个或多个事件处理程序(函数),来完成我们想要实 ...

  9. DOM的概念(1)

    什么是DOM? 通过 JavaScript,您可以重构整个HTML文档.您可以添加.移除.改变或重排页面上的项目.要改变页面的某个东西,JavaScript就需要对HTML文档中所有元素进行访问的入口 ...

  10. JavaScript DOM学习总结(一)

    DOM 什么是DOM?简单地说DOM是一套对文档内容进行抽象和概念化的方法.   W3C给出的DOM定义是这样的:"一个与系统平台和编程语言无关的接口,程序和脚本以通过这个接口动态的访问和修 ...

随机推荐

  1. Rocket - util - Counters

    https://mp.weixin.qq.com/s/q7R2Dn9p9cch_ABN4raReQ   介绍几种计数器的实现,以及其中的一点小细节.   ​​   1. ZCounter   ​​   ...

  2. Verilog缺少一个复合数据类型,如C语言中的结构体

    https://mp.weixin.qq.com/s/_9UsgUQv-MfLe8nS938cfQ Verilog中的数据类型(Data Type)是分散的,缺少一个复合数据类型:把多个wire, r ...

  3. jchdl - RTL实例 - And

    https://mp.weixin.qq.com/s/86d_sFN0xVqk1xRaRyoAkg   使用rtl语法,实现简单的与门.   参考链接 https://github.com/wjcdx ...

  4. URL跳转与钓鱼

    从登录页跳转到另一个页面就叫做URL跳转. 1.URL跳转 URL跳转一般分为两种,(1)客户端跳转:(2)服务端跳转.对用户来说,两种跳转都是透明的,都是指向或者跳转到另一个页面,页面发生了改变.但 ...

  5. Spring Cloud 系列之 Apollo 配置中心(三)

    本篇文章为系列文章,未读前几集的同学请猛戳这里: Spring Cloud 系列之 Apollo 配置中心(一) Spring Cloud 系列之 Apollo 配置中心(二) 本篇文章讲解 Apol ...

  6. Java实现 LeetCode 738 单调递增的数字(暴力)

    738. 单调递增的数字 给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增. (当且仅当每个相邻位数上的数字 x 和 y 满足 x <= ...

  7. Java实现 蓝桥杯VIP 算法训练 求指数

    问题描述 已知n和m,打印n1,n2,-,nm.要求用静态变量实现.nm表示n的m次方.已知n和m,打印n1,n2,-,nm.要求用静态变量实现.nm表示n的m次方.(每行显示5个数,每个数宽为12, ...

  8. java实现购物券消费方案

    公司发了某商店的购物券1000元,限定只能购买店中的m种商品.每种商品的价格分别为m1,m2,-,要求程序列出所有的正好能消费完该购物券的不同购物方法. 程序输入: 第一行是一个整数m,代表可购买的商 ...

  9. Swift 语法总结

    1,用 var 定义变量 ,与js类似. let 用于定义常量,定义完后不能修改. var 用于定义变量,可以修改. swift可以自动识别属性类别. 2,使用 import 语句来引入任何的 Obj ...

  10. zabbix 中文乱码

    环境 zabbix 3.4.7 centos 7.4 问题现象 zabbix 中文乱码     解决方法 1.先准备一个字体包    Windows路径 C:\Windows\Fonts\simkai ...