`

live绑定事件的实现原理

 
阅读更多
1.冒泡机制
(1)冒泡机制:
<html>
<div id="content">
    <span>内层span元素</span>
</div>
</html>

点击span之后的冒泡顺序是:
span
div
body
之所以称为冒泡,是因为事件会按照DOM的层次结构像水泡一样不断向上直至顶端。
(2)冒泡机制引发的问题:
事件冒泡可能会引起预料之外的效果。上例中,本来只想触发<span>元素的click事件,然而<div>元素和<body>元素的click事件也同时被触发了。
(3)停止冒泡机制:
停止事件冒泡可以阻止事件中其他对象的事件处理函数被执行。在JQuery中提供了stopPropagation()方法来停止事件冒泡。
(4)事件委托机制:
基于事件冒泡机制,事件委托就是事件目标自身不处理事件,而是把处理任务委托给其父元素或者祖先元素,甚至根元素(document)。

2.live绑定事件的实现原理
所有的事件不是绑定而是委托。
$(".clickMe").live("click",fn);
$("body").append("<div class='clickMe'>测试live方法的步骤</div>");
当我们点击这个新增的元素时会依次发生如下步骤:
(1)生成一个click事件,传递给div来做处理
(2)由于没有事件直接绑定在div上,所以事件直接冒泡到DOM树上
(3)事件不断冒泡,直到DOM树的根节点上,默认情况下,根节点上就绑定了这个click事件
(4)执行由live绑定的click事件
(5)检测绑定事件的对象是否存在,判断是否需要继续执行绑定的事件。检测事件对象是通过检测
$(event.target).closest('.clickMe') 能否找到匹配的元素来实现的。
(6)通过(5)的测试,如果绑定事件的对象存在的话,就执行绑定的事件。

live绑定事件的不足之处
使用live当然有利也有弊:
好处就是:元素更新时不用反复去定义事件。
坏处就是:把事件绑定在document上会在页面上每一个元素都呼叫一次,如使用不当会严重影响性能。
分享到:
评论

相关推荐

    使用live555实现实时流的推流服务器

    1. **初始化Live555**: 首先,我们需要创建一个`BasicUsageEnvironment`对象,它是live555的基础环境,提供了事件循环和错误处理。接着,创建一个`TaskScheduler`对象,它负责调度任务执行。 2. **创建RTSP服务器**...

    html集成live2D,demo

    HTML集成Live2D技术是一种将二维动画角色与...同时,这个压缩包可能还包含了一些注释和文档,帮助初学者理解代码的工作原理和实现细节。对于想要在网页中添加趣味性和互动性的开发者来说,这是一个非常有价值的资源。

    运用live555编译后的库实现demo调用例子

    在实际应用中,你可能需要根据具体需求扩展这个示例,例如添加更多的媒体文件支持、实现更复杂的控制逻辑或者优化性能。同时,理解和学习Live555库的内部工作原理,将有助于你更好地定制和优化你的流媒体应用。 ...

    LiveChart进阶版学习

    在压缩包中的"LiveCharts2-master"是LiveChart的最新版本,LiveCharts 2引入了更多的改进和新特性,比如性能优化、新的图表类型、更强大的数据绑定和事件处理机制。 1. 性能提升:LiveCharts 2对内部结构进行了优化...

    jQuery中对未来的元素绑定事件用bind、live or on

    `live`方法的工作原理是将事件监听器绑定到`document`或者父元素上,并且使用事件委托的方式,将事件处理逻辑委托到具体的子元素。`live`方法通过检查事件冒泡过程中的`target`,来决定是否执行特定的事件处理函数。...

    中控 指纹仪 ZKFinger SDK live10R、live20R、live20M

    《中控指纹仪ZKFinger SDK的二次开发详解》 ...然而,成功的关键不仅在于掌握SDK的使用,更在于对生物识别原理的理解以及良好的编程实践。只有这样,才能充分挖掘出ZKFinger SDK的潜力,打造出色的应用产品。

    解析jQuery的三种bind/One/Live事件绑定使用方法

    3. **live**:`live()` 主要是为了解决动态添加的元素无法绑定事件的问题。它能够监听所有符合选择器的当前及未来元素的事件,无论这些元素何时被添加到DOM中。例如,使用`$('a').live('click', function() {...})`...

    live2d.rar

    本文将深入探讨网页版Live2D看板娘的实现原理、相关技术及其在网页中的应用。 首先,我们要理解什么是Live2D。Live2D是一种2D实时渲染技术,它通过将静态的2D图像转化为可以动态变化的模型,赋予角色以生动的表情和...

    最新版live555_vs2012工程调试 (2014-11-07)

    4. 配置工程:在项目的属性页中,设置相应的编译器选项,例如包含目录(添加Live555的头文件路径),库目录(添加Live555的库文件路径),以及链接器输入(添加必要的依赖库)。 5. 编译与调试:点击“生成”按钮,...

    live555 的openRTSP 改写

    了解RTSP协议以及live555库的工作原理对于理解改写过程至关重要。RTSP是一种应用层协议,用于控制多媒体数据的传输,而live555库提供了一套完整的API,使得开发者能够轻松地在各种平台(如Windows、Linux、iOS、...

    live2D实现网页看板娘卡通人物交互图

    通过实践这个教程,你不仅可以掌握Live2D的基本原理,还能学会如何将一个萌萌的卡通人物引入到自己的网站中,增加用户的互动体验。无论是为了个人兴趣还是专业发展,深入理解和应用Live2D都能为你的技能树增添亮点。...

    Live-Charts-master.zip

    通过研究这些示例,开发者可以学习到如何绑定数据源、设置图表样式、添加事件处理以及如何利用LiveCharts的扩展功能。 总的来说,LiveCharts是一款强大的图表控件,不仅提供了一套完整的图表解决方案,还允许开发者...

    live555流媒体服务器

    本文将深入探讨Live555流媒体服务器的原理,并结合Visual Studio 2010,详细介绍如何编译与运行Live555项目。 首先,我们要了解Live555的核心功能。Live555提供了一个强大的框架,用于构建实时流媒体服务器和客户端...

    基于live555的rtsp客户端模块

    这个模块是基于Live555库的`testRtspClient.cpp`示例代码改造而成,被封装为DLL动态链接库,并且添加了视频帧回调接口,使得开发者可以更方便地处理接收到的视频数据。 1. **RTSP协议**: RTSP是一种应用层协议,它...

    内置多种样式的 .Net 曲线 图表控件 控件 Live-Charts C# 源码

    你可以研究代码结构,理解数据绑定、事件处理和渲染过程,也可以根据需求扩展功能或优化性能。 Live-Charts的特性包括但不限于: - **数据绑定**:Live-Charts支持MVVM(Model-View-ViewModel)模式,方便通过数据...

    WeLive免费开源PHP在线客服系统 v5.9.0.zip

    5. **毕业设计论文**:WeLive在线客服系统适合作为计算机相关专业学生的毕业设计题目,学生可以通过研究源代码,理解其工作原理,并在此基础上进行功能扩展或优化。 6. **计算机案例**:对于教育和培训,WeLive可以...

    android ndk下编译的live555源码(新版)

    总的来说,将Live555移植到Android平台是一个复杂的过程,需要深入理解Android NDK的工作原理,熟悉C/C++编程,以及具备一定的Android开发经验。完成移植后,你可以利用Live555的强大功能,开发出高效、稳定、功能...

    texlive中文指南

    这些信息对于深入理解 TEXLive的工作原理和配置细节至关重要。Web2C用户指南的每个小节都详细地介绍了特定功能的用途、配置方法以及使用案例,帮助用户深入掌握 TEXLive的高级用法。 TEXLive还提供了一个致谢部分,...

    Live555+Vs2013

    3. **GroupSock**、**BasicUsageEnvironment**、**UsageEnvironment**、**WindowsAudioInputDevice**、**LiveMedia**:这些是Live555库的主要组成部分,它们提供了实现RTSP、RTP和RTCP所需的各种功能。GroupSock处理...

    liveReload下载chrome自动刷新插件

    LiveReload的工作原理是这样的:首先,你需要在开发环境中安装并配置LiveReload服务器,这通常可以通过Node.js的npm包管理器完成。然后,在浏览器中安装对应的LiveReload扩展,如Chrome的“LiveReload”插件。当你的...

Global site tag (gtag.js) - Google Analytics