从今天的章节中,我将重点放在KitJs的事件
管理的内容,并试图揭示你平实的
语言如何主流JS框架实现了自己
独立的事件管理
功能的内部。
(一)普通Dom事件
我们通常可以通过
支持HTML来编写事件。
测试
或绑定到DOM对象
document.getelementbyid('a')。Onclick =
函数(){ alert(1)}
或两级事件
document.getelementbyid(a。AddEventListener('点击',函数(){ alert(1)},假)
或通过
脚本标记
W3C标准
推荐了这两个级别事件的第三种绑定方式,以解耦HTML和Js的强依赖性。
(二)问题
但是如果我们直接使用JS编程的3种
方法是不够的,因为会出现以下问题
1。
浏览器
兼容性,IE和W3C支持的浏览器与绑定两个级别事件的方式不兼容。
2。在2级事件绑定之后,您不知道其他人是否为同一个元素绑定了事件,哪些事件被捆绑了,事件的内容是什么
3、在2级事件绑定方法触发后,
顺序不会按照绑定前的顺序
执行,但有时我们需要按顺序触发
命令。
4、当触发同一元素的事件时,W3C的标准API不支持绑定到同一元素的任何其他事件,W3C继续触发。
5,很多时候,通过匿名函数的2级事件我们登记,不留登记事件执行的方法
处理,所以很难注销事件通过removeEventListener。
(三)如何
解决工具箱问题
好的,js框架是为了解决上述问题而存在的。让我们看看工具包如何处理上述问题。
在kit.js API,有一个EV(config)方法
该方法接受一个包含4个重要
参数的映射
类型对象,
EL需要绑定的元素
字符串类型的事件
FN触发执行方法
范围可以省略,如果需要指定这个指针,如果没有,则当
注册作为指针引入时,EL
(四)代码分析
让我们来看一下代码实现。
直接从
核心看
如果
输入参数不为空,一个对象是建立在传入的参数是用来节省El KitJs事件的注册evreg
在evreg对象的子对象,称为事件evregev,使登记。
在evregev对象,一键
保存当前事件,值是一个数组,数组的参数
配置,根据订单顺序到达EV方法
介绍,这是一个数组!!!这非常重要,因为数组可以保存顺序。
还有一个匿名的方法称为evregfn,从而节省了事件触发。
我们可以看到,evregfn是匿名的事件。在开始的时候,他会告诉如果变量窗口{我。常数。kit_event_stopimmediatepropagation }全球是= =真的,如果这是真的,它会回来,它不会继续执行。
再往下看,他会接受的事件触发的EV对象,并添加许多物体在mergeif方式的电动汽车,如
目标,currentTarget和relatedtarget,为了解决浏览器兼容性问题。
stopnow,stopdefault,和stopgoon是为了阻止事件继续触发的方法。
这是evregfn的关键,我们将在事件内部数组的evregev创造周期,根据命令,参数配置在执行
删除的EV方法,方法内部的配置参数,如果该方法返回的值不为空,则返回的返回值
最后,做一个浏览器兼容和约束我们的evregfn匿名方法在一个2级事件。
(五)摘要
简单地说,一个自己的工具包的匿名方法,缓存将事件注册处理成一个数组,这样您就可以记住事件序列,并在事件、参数、方法等之前查找入口,同时兼容兼容的浏览器。
(六)
取消事件
借助工具包来缓存事件句柄,取消很容易。
你可以看到盒找出相应的事件配置比较直接比较或对比的方式fn.tostring fn.tostring()。修剪(),并删除它从数组。
(七)事件增强
现在,你应该注意试剂盒用于
系统的事件对象做了mergeif
操作。首先,我们为什么要做megerif,因为系统中的事件对象的
属性是只读的,不能被覆盖,它只能说它没有属性。
所以只有megerif试剂盒,我们都知道,每个浏览器事件对象,事件对象具有不兼容的,所以我们需要去盒固定不兼容,如IE没有目标属性,只有srcelement,我们可以添加目标属性的他,与W3C标准兼容的实现
当然,只有修理是不够的,以满足我们的需要。在许多
情况下,我们还需要为事件对象做一点肥料。
例如,当开发iPhone着陆touchmove,我们
经常需要接单指的偏移,并以单指标的偏移,也需要电动车。targettouches { 0 }。ClientX,这样的代码。但是一旦匿名功能完成,它就不能与PC兼容。
你怎么做,也不要紧,我们可以给事件对象mergeif自身属性
firstfingerclientx等等,这样我们就可以简单地实现
移动端,在PC端的开发代码是统一的。
下一篇文章是说HTML5拖放,高级手势是基于这个基础的。
为什么不加入,新的事件,像ExtJS,因为
1。系统的原始对象具有一定的继承关系,不想破坏它。
2。如果使用自己的新对象,它可能导致代码脱离框架,而不是可移植性,并且需要再次更改代码内容。