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. Chisel3 - util - Valid

    https://mp.weixin.qq.com/s/L5eAwv--WzZdr-CfW2-XNA   Chisel提供的Valid接口.如果valid为置1,则表明输出的bits有效:反之,则输出无 ...

  2. Java并发编程 (八) J.U.C组件拓展

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.J.U.C-FutureTask-1 FutureTask组件,该组件是JUC中的.但该组件不是 A ...

  3. Protocol Buffers工作原理

    这里记录一下学习与使用Protocol Buffer的笔记,优点缺点如何使用这里不再叙述,重点关注与理解Protocol Buffers的工作原理,其大概实现. 我们经常使用Protocol Buff ...

  4. Java实现 LeetCode 797 所有可能的路径 (DFS)

    797. 所有可能的路径 给一个有 n 个结点的有向无环图,找到所有从 0 到 n-1 的路径并输出(不要求按顺序) 二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点(译 ...

  5. Java实现 蓝桥杯 算法训练 字符串长度(IO无敌)

    试题 算法训练 字符串长度 问题描述 输入一个字符串,输出其长度. 输入格式 输入一个字符串 输出格式 输出字符串长度 样例输入 一个满足题目要求的输入范例. HelloWorld 样例输出 10 数 ...

  6. Java实现 LeetCode 363 矩形区域不超过 K 的最大数值和

    363. 矩形区域不超过 K 的最大数值和 给定一个非空二维矩阵 matrix 和一个整数 k,找到这个矩阵内部不大于 k 的最大矩形和. 示例: 输入: matrix = [[1,0,1],[0,- ...

  7. Java实现 LeetCode 154 寻找旋转排序数组中的最小值 II(二)

    154. 寻找旋转排序数组中的最小值 II 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找 ...

  8. Java实现 LeetCode 121 买卖股票的最佳时机

    121. 买卖股票的最佳时机 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不 ...

  9. Java实现 LeetCode 102 二叉树的层次遍历

    102. 二叉树的层次遍历 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 2 ...

  10. Java实现蓝桥杯二项式的系数规律

    二项式的系数规律,我国数学家很早就发现了. 如[图1.png],我国南宋数学家杨辉1261年所著的<详解九章算法>一书里就出现了. 其排列规律: 1 1 1 2 1 3 3 1 4 6 4 ...