javascript事件之:谈谈自定义事件(转)
http://www.cnblogs.com/pfzeng/p/4162951.html
对于JavaScript自定义事件,印象最深刻的是用jQuery在做图片懒加载的时候。给需要懒加载的图片定义一个appear事件。当页面图片开始出现时候,触发这个自定义的appear事件(注意,这里只触发一次)。
由此,现在我们通过JavaScript谈一谈自定义事件。
所谓事件,说的明白点,就是在一个合适的时候触发调用某个函数。平常说的事件是那些比较常用的,绑定在元素身上的某个方法,当用户触发某个行为时,(click, focus, mouseover, mouseout, load ......)这个函数触发。自定义事件也是如此,只是触发的方式可以由你自己决定,比如我们上面提到的appear事件,当这个元素可见时,触发某个自定义的方法。
我们用JavaScript模拟一下。
//定义两个方法,为元素添加事件,触发事件 1 function add(el, type, fn){
el.listeners = el.listeners || {}
el.listeners[type] = el.listeners[type] || []
el.listeners[type].push(fn)
el.addEventListener(type, fn, false);
}
function trigger(el, type){
if(el.listeners){
var triggerArr = el.listeners[type] || [];
if(triggerArr.length){
for(var i = 0; i<triggerArr.length; i++){
triggerArr[i]();
}
}
}
}
绑定事件,并触发
function doFn(){
alert("appear触发弹出!")
}
function doFn2(){
alert("appear触发弹出2!")
}
add($doTrigger, "doTrigger", doFn)
add($doTrigger, "doTrigger", doFn2)
trigger($doTrigger, "doTrigger")
页面加载,弹出,"appear触发弹出!","appear触发弹出2!"。
实现原理非常简单。为元素添加一个属性listeners,默认为{}, 添加时候,往对象里加一个默认值为[]的type属性。触发的时候直接得到el.listeners[type]。触发里面每一个方法即可。
删除更简单
function remove(el, type, fn){
if(el.listeners && el.listeners[type]){
delete el.listeners[type]
}
el.removeEventListener(type, fn, false)
}
对于默认事件呢,我们也测试一下
add($clickTrigger, "click", clickFn)
add($clickTrigger, "click", clickFn1)trigger($clickTrigger, "click")
function clickFn(){
alert("click触发弹出!")
}
function clickFn1(){
alert("click触发弹出!")
}
页面一加载弹出。点击“click事件”也弹出。
remove($clickTrigger, "click", clickFn) remove($clickTrigger, "click", clickFn1)
remove之后,页面加载不弹出,点击也不弹出。
注意,以上的代码都是基于w3c标注。以后有时间我们谈谈事件的兼容性。
http://www.zhangxinxu.com/wordpress/2012/04/js-dom%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BA%8B%E4%BB%B6/
javascript事件之:谈谈自定义事件(转)的更多相关文章
- javascript事件之:谈谈自定义事件
对于JavaScript自定义事件,印象最深刻的是用jQuery在做图片懒加载的时候.给需要懒加载的图片定义一个appear事件.当页面图片开始出现时候,触发这个自定义的appear事件(注意,这里只 ...
- javascript和jquey的自定义事件小结
“通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率.” 可以把多个关联但逻辑复杂的操作利用自定义事件的机制灵活地控制好 对象之间通过直接方法调用来交互 1)对象A直接调用 ...
- js事件模型与自定义事件
JavaScript 一个最简单的事件模型,需要有事件绑定与触发,还有事件删除. var eventModel = { list: {}, bind: function () { var args = ...
- Flex事件机制学习-自定义事件实现类间通信 .
今天,学习Flex自定义事件,可以使两个类通信,定义一个Main类. public class Main extends Sprite { public function ...
- mui 事件管理及自定义事件详解
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- Vue自定义事件:触发自定义事件
一 项目结构 二 子组件(Mongo.vue) <template> <button @click="eat">按钮</button> < ...
- Javascript事件模型系列(四)我所理解的javascript自定义事件
被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...
- 理解的javascript自定义事件
理解的javascript自定义事件 被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情, ...
- 详解javascript实现自定义事件
这篇文章主要为大家介绍了javascript实现自定义事件的方法,自定义事件,顾名思义,就是自己定义事件类型,自己定义事件处理函数,javascript如何实现自定义事件,需要了解的朋友可以参考下 我 ...
随机推荐
- ExtJs combobox模糊匹配
下拉列表模糊查询(重要代码): listeners : { beforequery : function(e) { var combo = e.combo; if(!e.forceAll){ var ...
- python学习笔记系列----(四)模块
这一章主要是叙述了python模块的概念以及包的概念,还有它们的使用:收获也是大大的. 提起python文件,经常会听到3个名词,python脚本,python模块,python包.脚本的概念是从py ...
- GridView的高度自适应
接着上面一篇文章. 当GridView不知道parent高度的时候,也就是MeasureSpec是UNSPECIFIED,这个时候,GridView高度为第一个child的高度,并显示滚动条. mIt ...
- js学习心得之思维逻辑与对象上下文环境(一)
html5 canvas矩形绘制实例(绘图有js 实现) html: <canvas id="myCanvas" width="200" height=& ...
- EF 数据初始化
数据库不存在时重新创建数据库: Database.SetInitializer<testContext>(new DropCreateDatabaseAlways<testConte ...
- 走进spring之springmvc实战篇(二)
本篇继篇一之后加入了jdbc并使用了注解 篇一进行了对spingmvc的基础配置http://www.cnblogs.com/liuyanhao/p/4798989.html 首先让我们先了解下注解的 ...
- 报表控件NCreport教程:子查询系统设计
数据报表中经常需要用到主从数据关系,比如发票.订单等一类的特殊文件,在报表控件NCreport中也不例外.数据报表至少有一个表头和一个通过 主键和外键关联的相关细节数据集.子查询系统则是通过父数据源驱 ...
- Linux内核USB驱动【转】
本文转载自:http://www.360doc.com/content/12/0321/14/8363527_196286673.shtml 注意,该文件是2.4的内核的驱动源文件,并不保证在2.6内 ...
- Bash:-3次错误输入退出脚本
Limit_Condition() { let count++ ]];then echo "超过3次机会,自动关停脚本" exit fi Comfirm() { count= wh ...
- git github简单知识
Git 常用命令 git init here -- 创建本地仓库(repository),将会在文件夹下创建一个 .git 文件夹,.git 文件夹里存储了所有的版本信息.标记等内容 git remo ...