jQuery 源码剖析 (五) 事件绑定原理剖析

jQuery 源码解析代码及更多学习干货: 猛戳GitHub

本篇代码为 my-jQuery 1.0.5.js

一、基础知识

1.DOM 0级事件模型:
通过JS指定事件处理程序传统方式,就是将一个函数赋值为一个事件处理程序属性。onclick

2.DOM 2级事件模型:规定的事件流包括3个阶段:事件捕获阶段、处于目标阶段和时间冒泡阶段,首先发生的是事件捕获,然后处于目标阶段,最后是事件冒泡。

addEventListener(),该方法接受三个参数
(1)处理事件的名称
(2)事件处理程序
(3)一个指定实在事件冒泡还是事件捕获阶段处理的布尔值。true则为在事件捕获阶段处理;false(默认)为在事件冒泡阶段处理.

事件留

3.事件委托:是指利用事件冒泡,只指定一个事件处理程序来管理某一类型的所有事件,可以达到提升整体运行的性能。本质是DOM的内层结构可以通过包含的外层结构通过代理的方式来触发。

4.bind

语法:\$(select).bind(event,data,function)

bind()方法为被选元素添加一个或多个事件处理程序,并规定事件发生时运行的函数。

5.delegate

语法:delegate()方法为被选元素的子元素,添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。

6.on

$(selector).on(event,child,data,function)

定义和用法:(1)on()方法在被选元素及子元素上添加一个或多个事件处理程序.自jQuery v1.7起on()方法是bind()和delegate()方法的新的替代品,推荐使用该方法。

二、开始剖析源码

首先我们要搞明白jQuery事件处理机制为我们解决了那些问题?

(1)首先解决的是浏览器的兼容性问题

(2)一个事件类型添加多个事件函数,一个添加多个事件类型的处理函数

(3)简洁定义方式

(4)可以自定义事件

常用写法:

(1)多个事件绑定同一个函数

$('#id').on("mouseover mouseout",function(){

    console.log("hello");
})

(2)多个事件绑定不同函数

$("#id").on({
    mouseover:function(){
        $("body").css("background-color","red");
    },
    mourseout:function(){
        $("body").css("background-color","yellow");
    },
    click:function(){
        $("body").css("background-color","black");
    }
});

(3)自定义事件

$("#id").on("myOwnEvent",function(event,showName){

    console.log("hello");
});
$("#id").trigger("myOwnEvent",["james"]);

三、jQuery事件设计原型

原型图

上图很清晰的展现出了jQuery的事件绑定原型链,具体的实现思路是:

(1).给jQuery对外扩展个on方法

(2).定义一个事件event方法,给event定义add,dispath,fix,及handlers方法

(3)最后通过传入的事件函数,绑定相关的响应事件类型,处理函数

具体代码参照my-jQuery 1.0.5.js
点我下载

其他

jQuery 源码剖析 系列预计写十篇左右,旨在加深对原生JavaScript 部分知识点的理解和深入,重点讲解 jQuery核心功能函数选择器Callback 原理Deferred延时对象原理、事件绑定、jQuery体系结构、委托设计模式、dom操作、动画队列等。
如果有错误或者不严谨的地方,请务必给予指正,十分感谢。如果喜欢或者有所启发,欢迎 star⭐️,对作者也是一种鼓励。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值