js基础之事件捕获与冒泡原理_javascript技巧

来源:脚本之家  责任编辑:小易  

CCD的基本工作原理:在N型或 P型硅衬底上生长一层二氧化硅薄层,再在二氧化硅层上淀积并光刻腐蚀出金属电极,这些规则排列的金属-氧化物-半导体电容器阵列和适当的输入、输出电路就构成基本的 CCD移位寄存器。对金属栅电极施加时钟脉冲,在对应栅电极下的半导体内就形成可储存少数载流子的势阱。可用光注入或电注入的方法将信号电荷输入势阱。然后周期性地改变时钟脉冲的相位和幅度,势阱深度则随时间相应地变化,从而使注入的信号电荷在半导体内作定向传输。CCD 输出是通过偏置PN结收集电荷,然后放大、复位,以离散信号输出。扩展资料:CCD的应用:1.传真机中使用的线阵ccd图像通过透镜成像在电容器阵列的表面上,根据其亮度在每个电容器单元上形成电荷。用于传真或扫描仪的线阵ccd一次捕获一小片光和阴影,而用于数码相机或照相机的平面ccd一次捕获整个图像或从中提取正方形区域。2.超高分辨率ccd芯片仍然相当昂贵,配备了3-ccd静态摄像机,其价格往往超过许多专业摄影师的预算。所以一些高端相机使用旋转滤色器。3.ccd在天文学中有着非常好的应用,使固定望远镜能够像跟踪望远镜一样工作。其方法是使ccd上电荷的读取和运动方向与天体运行方向一致,速度同步。ccd导星不仅能使望远镜有效地校正跟踪误差,而且使望远镜记录的视场比原来的大。参考资料来源:百度百科—电荷耦合器件www.zgxue.com防采集请勿采集本网。

想要了解什么是事件捕获与冒泡,需要先了解什么是事件。

GPS原理 24颗GPS卫星在离地面1万2千公里的高空上,以12小时的周期环绕地球运行,使得在任意时刻,在地面上的任意一点都可以同时观测到4颗以上的卫星。由于卫星的位置精确可知,在GPS观测中,我们

什么是事件?

事件流、冒泡、捕获、事件对象、事件框架、选择框架。? 框架封装中级: 运动原理、单物体运动框架、多物体运动框架、运动框架面向对象封装。? 框架封装高级和补充: JQuery框架雏形、可扩展性、模块化、

我们知道,在前端开发中,JavaScript负责定义网页的“行为”。这里所说的“定义”,其实指的是开发者可以通过JavaScript语言向浏览器描述一些规则,浏览器按照这些规则与用户进行交互。比如开发者希望当用户点击页面上某个按钮的时候,就弹出一个窗口,显示特定的内容。而当用户真正点击这个按钮的时候,浏览器将按照开发者定义的这个规则,去弹出指定的窗口,显示指定的内容。

根据光色和颜色变化的可逆反应原理,它可以在阳光和紫外线下快速变暗,完全吸收紫外线,被可见光中性吸收。快速恢复无色透明。镜片的光致变色特性是永久可逆的。眼镜的功能不外乎两种,一种是矫正视力,让

在上面的例子中,浏览器是一切规则的执行者,开发者是这些规则的制定者,而JavaScript只是开发者向浏览器描述这些规则时所使用的的语言(否则浏览器无法知道开发者想要在什么情况下做什么事)。假如我们通过以下的语句向浏览器描述了一条规则:

电子捕获检测器的工作原理是什么?电子捕获检测器(ECD)是一种对痕量电负性(亲电子)有机化合物的分析很有效的检测器。它只对电负性物质有信号,样品电负性越强,给出的信号越大,但对不具电负性的物质则没有

<body> <button id="btn">点击</button> <script> var button = document.getElementById("btn"); //获取页面上的按钮 button.addEventListener("click", function(){ //定义点击事件 alert("我被点击了"); }) </script></body>

等级捕获率=50%*基本捕获率/CP系数 CP系数为固定值,与等级成正比。LVL1时0.094,LVL30时0.7317,LVL 56%48%40%32%24%16%。等级捕获率通过以下公式进行计算而得出: 对于只能进化一次的PM,其进化形态的

页面上现在有一个按钮,我们首先使用原生DOM获取这个按钮,然后使用button.addEventListener(“click”, function(){})这样的语法向浏览器描述了一条规则:当这个按钮被点击(click)时,弹出提示框,显示“我被点击了”。用户点击按钮后网页就会出现如下提示:

浏览器把这次“点击”称为一个“事件”。“事件”用于描述交互过程中某些特定的关键点(如点击、鼠标滑动、滚轮滚动、按下键盘、触屏操作等,每个操作都对应特定的事件,不过事件也可能与用户行为无关,比如网页加载完毕也是一个事件)。而浏览器处理交互最重要的手段就是基于事件来执行开发者定义好的回调函数(如在用户“点击按钮”时“弹出窗口”,而定义“弹出窗口”行为的就是回调函数,也就是addEventListener中的function)。

定义完这条规则,当用户点击按钮时,浏览器就会弹出上述窗口了。我们称“点击”这个事件是在这个按钮上触发的(因为我们的回调函数是绑定在这个按钮上的)。

那什么是事件的捕获与冒泡呢?

事件的捕获与冒泡

这个问题与HTML的结构息息相关。

在前端开发中,我们使用标签语言HTML来描述网页结构,如一个标题、一个段落、一个表格等,这些网页元素描述了网页上有哪些需要显示的内容,它们构成了整个网页的“骨骼”,通常是一种嵌套的结构,比如:

<html> <head> ... //这是对网页内容的元描述 </head> <body> //这是网页需要渲染的真正内容 <div> <h1>标题</h1> <p>这里是一个段落</p> </div> </body></html>

上述网页结构示意图如下(在没有设置padding等属性的情况下,子元素通常会填满父元素,这里的内间距只是为了说明元素的嵌套关系):

我们看到,body元素是整个网页的容器,它的内部包含了一个div元素,而div的内部又包含了两个元素:h1和p。假如我们现在在p的内部点击了一下,那么请问我们有没有点击它的外部容器div,以及最外部的body呢?

从浏览器的角度来看,我们同时在点击这三个元素。

想要证明这个结论非常简单,只需要使用addEventListener向div和body各自绑定click事件,如果点击p时也会被触发,那就说明上面的结论是正确的。毫无疑问,它们会被触发。

那么问题来了,既然用户同时在点击这三个元素,浏览器应该先执行哪个元素定义的回调函数呢(由于JavaScript采用单线程模型,执行回调函数必然有一定的先后顺序)?

这个问题实际上是在说,对于嵌套的元素,应该从内向外还是从外向内响应事件。浏览器之争的两大对立方分别有自己的看法:Netscape公司认为应当由最外层的body首先得到这个事件,其次是div,最后才是目标元素p;而微软的IE开发组则认为,应当是内部的p首先得到这个事件,然后是div,最后才是body。在没有标准约束的情况下,两者按照自己的想法去设计浏览器的事件模型,Netscape从外向内传播的模型在业内被称为事件捕获模型,而微软从内向外传播的模型则被称为事件冒泡模型。

两个模型虽然从思路上南辕北辙,但是都可以保证所有绑定的回调函数正确触发(不过触发顺序是相反的。如果这个触发顺序很重要,那么在当时,你的代码可能只能在一个浏览器中正确运行,或者去做恶心的浏览器兼容)。不过浏览器允许开发者在事件传播的过程中阻止事件的继续传播,此时两者的差异就变得极其明显。

假如我们在定义点击div元素的回调函数时阻止了事件的传播:

div.addEventListener("click", function(e){ ... e.stopPropagation(); //阻止事件继续传播})

这个代码会在两种模型下产生巨大的差异。在捕获模型中,由于最外部首先得到该事件,因此body的点击事件首先被触发,之后是div的点击事件。由于阻止了事件传播,p元素不会触发回调。而在冒泡模型中则恰恰相反,内部的p首先得到该事件,其次才是div,因此触发回调的将是p和div,body因为事件没有冒泡上来而无法监听到该事件。同样的代码在两种模型中产生了完全不同的行为,这对于开发者来说显然是不可接受的(两个模型都有自己的适用场景,也都有自己的合理性,因此对于模型的好坏不能一概而论)。

那么后来的国际标准组织是如何解决这个冲突的呢?答案就是由开发者自己选择。

标准的事件绑定使用addEventListener函数,它接收两个必传参数和一个可选参数:必传的为event(事件名,如"cick")和function(回调函数),可选的为useCapture(是否使用捕获模型,默认为false,根据MDN的接口说明,这里也可以传入一个对象,为本次监听设置其他参数,详细请参考MDN接口文档 - addEventListener)。

div.addEventListener("click", function(){}, true); //使用捕获模型

第三个参数就是标识开发者是否需要使用捕获模型,默认为false,也就是默认使用微软的冒泡模型(这是因为大多数事件都只在最内部的元素上触发,这也间接表明,冒泡模型的普适性更好)。如果开发者的需求确实需要使用捕获模型,可以将第三个参数设置为true。比如下面的例子:

事件捕获与冒泡的用法

了解了事件捕获与冒泡的基本原理之后,我们举个例子来说明这两个模型的基本用法。

假设有以下的DOM结构:

<div id="outer"> <div id="inner" style="width:100px;height: 100px;border: 1px solid black;"> </div> </div>

这是两个重叠的div,当点击时,两者都会响应这个click事件。假如事件绑定如下:

var outer = document.querySelector("#outer");var inner = document.querySelector("#inner"); outer.addEventListener("click", function(e){ alert("来自外部div的消息"); e.stopPropagation(); //阻止事件向内部传播 }, true); //使用捕获模型 inner.addEventListener("click", function(e){ alert("来自内部div的消息"); }, true); //使用捕获模型

页面上将只显示外部弹出的消息,内部的事件被e.stopPropagation()拦截了下来,导致事件没有触发。而如果写成下面的代码:

var outer = document.querySelector("#outer");var inner = document.querySelector("#inner"); outer.addEventListener("click", function(e){ alert("来自外部div的消息"); }, false); //使用冒泡模型 inner.addEventListener("click", function(e){ alert("来自内部div的消息"); e.stopPropagation(); //阻止事件向外部传播 }, false); //使用冒泡模型

这次是只显示了内部的消息,而没有显示外部的消息,说明事件在向上冒泡的过程中被阻止了。

注意

如果是在表格中内嵌复选框,希望实现点击一行时选中复选框,通过stopPropagation阻止CheckBox响应click事件并不能实现。测试发现复选框状态改变的事件似乎并不是在click事件触发的(断点跟踪表明,CheckBox在执行click回调之前,状态就已经发生了改变,具体是通过什么事件改变了选中状态尚不清楚),下面给一个可以处理行点击的示例:

<table border="1" cellspacing="0"> <tr class="tr"> <td> <input class="checkbox" type="checkbox"> </td> <td> 表格第一行 </td> </tr> <tr class="tr"> <td> <input class="checkbox" type="checkbox"> </td> <td> 表格第二行 </td> </tr></table><script> var tr = document.querySelectorAll(".tr"); //获取所有tr tr.forEach(function(item){ //为每个tr绑定click事件,手动选中复选框 item.addEventListener("click", function(e){ var checkbox = item.querySelector(".checkbox"); checkbox.checked = !checkbox.checked; }) }) var cb = document.querySelectorAll(".checkbox"); cb.forEach(function(item){ item.addEventListener("click", function(e){ this.checked = !this.checked; }); })</script>

这里没有使用stopPropagation阻止事件传播,而是通过为CheckBox定义额外的click事件来解决状态不变的问题(经过断点跟踪,此时在点击CheckBox时,状态发生了三次变化,第一次是触发了某个原生事件导致其状态变化,第二次是执行了tr的点击事件,第三次则是为CheckBox自定义的click事件)。也就是说,点击tr时状态改变一次,点击CheckBox时状态改变三次,功能均正常。

由于在大多数情况下,事件都是由最内层的元素来处理的,所以冒泡模型的应用更为广泛,它也因此成为绑定事件时使用的默认模型。

总结

事件的捕获与冒泡两个模型相对比较简单,只要明白了其中的原理,就可以很容易掌握通过stopPropagation阻止事件传播的使用。

浏览器的标准事件模型把事件的传播过程分成了三个阶段:捕获阶段、处于目标阶段和冒泡阶段。捕获阶段指事件从最外层传播到最内层之前的整个过程,对应捕获模型;处于目标阶段指的是事件刚好传播到目标元素上;而冒泡阶段指的是从最内层元素向外传播的整个过程。所以我们看到,标准的浏览器事件模型就是把捕获模型和冒泡模型有机地结合起来,使开发者可以以最简单的方式灵活地使用两个模型。

ELISA的原理:ELISA的基础是抗原或知抗体的固相化及抗原或抗体的酶标记。结合在固相载体表面的抗原或抗体仍保持其免疫学活性,酶标记的抗原或抗体既保留其免疫学活性,又保留酶的活性。进行检测时,样品中的受检物质(抗原或抗体)与固定的抗体或抗原结合。通过洗板除去非结合物,再加入酶标记的抗原或抗体,此时,能固定下来的酶量与样品中被检物质的量相关。通过加入与酶反应的底物后显色,根据颜色的深浅可道以判断样品中物质的含量,进行定性或定量的分析。由于酶的催化效率很高,间接地放大了免疫反应的结果,使测定方法达到很高的灵敏度。1971年Engvall和Perlmann发表了酶联免疫吸附测定(enzymelinkedimmunosorbentassay,ELISA)用于IgG定量测定的专文章,使得1966年用于抗原定位的酶标抗体技术发展成液体标本中微量物质的测定方法。ELISA可用于测定抗原,也可用于测定抗体。这种测定方法中有3种必要的试剂:1.固相的抗原或抗体;2.酶标记的抗原或抗体;3.酶作用的底物。根据试剂的来源和标本的性状及检测的具备条件,可设计属出各种不同类型的检测方法内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • js html事件冒泡和事件捕获操作示例
  • javascript事件冒泡与事件捕获实例分析
  • javascript 中事件冒泡和事件捕获机制的详解
  • 一篇文章让你彻底弄懂js的事件冒泡和事件捕获
  • js事件冒泡与事件捕获详解
  • js中绑定事件顺序(事件冒泡与事件捕获区别)
  • 浅谈javascript中的事件冒泡和事件捕获
  • js中事件冒泡和事件捕获介绍
  • javascript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
  • js事件冒泡、事件捕获和阻止默认事件详解
  • javascript事件冒泡和事件捕获详解
  • js之事件冒泡和事件捕获详细介绍
  • 浅析js 文字滚动效果
  • springmvc + easyui + $.ajaxfileupload实现文件上传注意事项
  • js字符串拼接在ie中都报错的解决方法
  • javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
  • js检验密码强度(低中高)附图
  • 微信小程序flex布局用法深入浅出分析
  • js 通用订单代码
  • javascript+html5+css3自定义弹出窗口效果
  • easyui form validate总是返回false的原因及解决方法
  • js replace()去除代码中空格的实例
  • elisa的基本原理
  • CCD的基本工作原理是什么
  • 基因捕获的基本原理
  • 外显子捕获的基本原理
  • GPS的原理
  • 前端要学哪些东西
  • 变色镜的原理
  • 电子捕获检测器及原理是什么?
  • 求口袋妖怪精灵捕获率计算方法
  • 电鳗放电的原理
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础知识javascript类库表单特效广告代码网页特效黑客性质javascript技巧domnode.jsjs其它首页javascriptjs html事件冒泡和事件捕获操作示例javascript事件冒泡与事件捕获实例分析javascript 中事件冒泡和事件捕获机制的详解一篇文章让你彻底弄懂js的事件冒泡和事件捕获js事件冒泡与事件捕获详解js中绑定事件顺序(事件冒泡与事件捕获区别)浅谈javascript中的事件冒泡和事件捕获js中事件冒泡和事件捕获介绍javascript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结js事件冒泡、事件捕获和阻止默认事件详解javascript事件冒泡和事件捕获详解js之事件冒泡和事件捕获详细介绍浅析js 文字滚动效果springmvc + easyui + $.ajaxfileupload实现文件上传注意事项js字符串拼接在ie中都报错的解决方法javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)js检验密码强度(低中高)附图微信小程序flex布局用法深入浅出分析js 通用订单代码javascript+html5+css3自定义弹出窗口效果easyui form validate总是返回false的原因及解决方法js replace()去除代码中空格的实例js刷新页面方法大全js中settimeout()的用法详解js截取字符串常用方法详细整理js页面跳转常用的几种方式js打开新窗口的2种方式js数组与字符串的相互转换方法js设置cookie、读取cookie、删除js删除数组里的某个元素方法js 将json字符串转换为json对象的javascript深入理解js闭包javascript页面动态显示时间变化示例代码layui--select使用以及下拉框实现键盘选择javascript中判断数据类型的方法总结javascript的递归之递归与循环示例介绍javascript变量作用域_动力节点java学院整javascript限制文本框只允许输入数字(曾经深入理解javascript系列(3) 全面解析modubootstrap paginator+pagehelper实现分页xml和web特殊字符js实时获取并显示当前时间的方法
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved