首页 »Javascript教程 » javascript代码:javascript事件模型代码 »正文javascript代码:javascript事件模型代码来源: 发布时间:星期六, 2008年12月27日 浏览:28次 评论:0
本节稍稍深入地讨论有关事件处理
![]() ![]() ![]() ![]() ![]() 1 事件处理模式 在 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 例如下面就是 ![]() ![]() ![]() function dispatchEvent(owner, eventType, eventArgs) { ![]() ![]() ![]() } function randomSerials(len) { function randomSignal ![]() { ![]() ![]() } var ret = ![]() for(var i = 0; i < len; i ![]() { ret.push(randomSignal ![]() } ![]() } function D ![]() { var buffer = ![]() var time = 0; this.readBuffer = function ![]() { var buf = buffer; buffer = ![]() time = 0; ![]() } this.bufferSize = function ![]() { ![]() } this.input = function(serials) { for(var i = 1; i < serials.length; i ![]() { var signal = Math.abs(serials[i] - serials[i - 1]); buffer[time ![]() ![]() dispatchEvent(this, "signalchange", {input:serials, time:time, buffer:buffer.slice(0)}); } } } var inputSerials = randomSerials(20); alert(inputSerials); var d ![]() ![]() ![]() d ![]() alert(d ![]() ![]() d ![]() { alert(eventArgs.time); } d ![]() 在上面 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() d ![]() { alert(eventArgs.time); } 是 ![]() ![]() ![]() ![]() ![]() ![]() 2 用户事件接口 ![]() 前面 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() function dispatchEvent(owner, eventName, eventArgs) { ![]() ![]() ![]() } 这个 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() dispatchEvent(this, "signalchange", {input:serials, time:time, buffer:buffer}); 传入 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 第 2个参数是 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 第 3个参数是 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() dispatchEvent ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 3 事件代理和事件注册 在事件处理模式中 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 事实上根据设计 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() function EventManager(owner) { owner = owner || this; this.dispatchEvent = function(eventType, eventArgs) { var events = owner["on"+eventType]; ![]() ![]() events = [events]; ![]() { for(var i = 0; i < events.length; i ![]() { ![]() (function(i){ ![]() ![]() })(i), 1 ); } } } this.addEventListener = function(eventType, closure) { ![]() ![]() { owner["on"+eventType] = ![]() } var events = owner["on"+eventType]; ![]() ![]() events = [events]; events.push(closure); } this.removeEventListener = function(eventType, closure) { var events = owner["on"+eventType]; ![]() ![]() events = [events]; for(var i = 0; i < events.length; i ![]() { ![]() ![]() events.splice(i, 1); } } } function randomSerials(len) { function randomSignal ![]() { ![]() ![]() } var ret = ![]() for(var i = 0; i < len; i ![]() { ret.push(randomSignal ![]() } ![]() } function D ![]() { var buffer = ![]() var time = 0; EventManager.call(this); //apply EnventManager Component. this.readBuffer = function ![]() { var buf = buffer; buffer = ![]() time = 0; ![]() } this.bufferSize = function ![]() { ![]() } this.input = function(serials) { for(var i = 1; i < serials.length; i ![]() { var signal = Math.abs(serials[i] - serials[i - 1]); buffer[time ![]() ![]() this.dispatchEvent("signalchange", {input:serials, time:time, buffer:buffer.slice(0)}); } } } var inputSerials = randomSerials(20); alert(inputSerials); var d ![]() ![]() ![]() d ![]() alert(d ![]() ![]() var eventHandler1 = function(eventArgs){ alert(eventArgs.time); } var eventHandler2 = function(eventArgs){ alert(eventArgs.buffer); } d ![]() d ![]() d ![]() d ![]() 在上面 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 在D ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 在为D ![]() ![]() ![]() ![]() d ![]() d ![]() d ![]() 运行过这个例子 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() d ![]() 先于事件 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 4 标准模式:事件分派和接收 在事件处理模式中 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 然而 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() function dispatchEvent(owner, eventType, eventArgs) { ![]() ![]() ![]() } function randomSerials(len) { function randomSignal ![]() { ![]() ![]() } var ret = ![]() for(var i = 0; i < len; i ![]() { ret.push(randomSignal ![]() } ![]() } function D ![]() ![]() { this.d ![]() ![]() d ![]() ![]() } function D ![]() { var buffer = ![]() var time = 0; var observer = null; this.input = function(serials) { for(var i = 1; i < serials.length; i ![]() { var signal = Math.abs(serials[i] - serials[i - 1]); buffer[time ![]() ![]() dispatchEvent(observer, "signalchange", {sender:this, input:serials, time:time, buffer:buffer.slice(0)}); } } this. ![]() { observer = obs; observer.readBuffer = function ![]() { var buf = buffer; buffer = ![]() time = 0; ![]() } observer.bufferSize = function ![]() { ![]() } } } var inputSerials = randomSerials(20); alert(inputSerials); var d ![]() ![]() ![]() d ![]() var d ![]() ![]() ![]() ![]() alert(d ![]() ![]() d ![]() { ![]() ![]() ![]() alert(eventArgs.time); } d ![]() 上面例子中 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 原文:http://bbs.51js.com/thread-69808-1-1.html by 月影 0
相关文章
读者评论发表评论 |
|