浅谈Event对象

      今天来说说事件,1995年IE定义了自己的事件模型,2004年DOM模型确定了标准的事件模型,并被其它浏览器所支持。所以事件处理需注意兼容性问题。当用户与Web页面进行某些交互时,解释器就会创建相应的event对象以描述事件信息。常见的事件有鼠标事件、键盘事件、状态事件,如:用户点击页面上的某项内容;鼠标经过某个元素;鼠标滚动窗口;用户按下某个按键;页面元素加载完成或加载失败等等。

    来说说事件句柄,也就是事件处理函数、事件监听函数,是用于响应某个事件而调用的函数。每一个事件均对应一个事件句柄,在程序执行时,将相应的函数或语句指定给事件句柄,则在该事件发生时,浏览器便执行指定的函数或语句。常见的事件句柄:onclick、ondbclick、onmouseover、onmousedown、onmouseup、onmouseout;onkeydown、onkeyup、onkeypress、onload、onunload、onchange、onfocus、onblur、onresize、onsubmit、onreset、onerror等等。

    事件绑定的三种方式:

第一种:直接在HTML中定义元素的事件相关属性。例:

HTML:<button οnclick="alert('点到我了')">按钮</button>

但这种方式违反了“内容与行为相分离”的原则,尽量少用。

第二种:在JavaScript脚本中为元素事件的相关属性赋值。例:

HTML:<button>按钮</button>

JS:

document.querySelector("button").οnclick=function(){

alert("点到我了");

}

这种方式实现了“内容与行为相分离”,但元素只能绑定一个监听函数。

第三种:一个事件可以绑定多个处理函数,但有兼容性问题。

HTML:<button id="btn">按钮</button>

JS:

var btn=document.getElementById("btn");

btn.attachEvent("onclick",function(){

alert("IE点到我了");

})//IE

btn.addEventListener("click",function(){

alert("DOM点到我了");

})//DOM

if(btn.addEventListener){//保证兼容性写法

btn.addEventListener('click',function(){

alert("点到我了");

})

btn.addEventListener('click',function(){

console.log("点到我了");

})

}else{

btn.attachEvent("onclick",function(){

alert("点到我了");

})

btn.attacheEvent("",function(){

console.log("点到我了");

})

}

好了,今天就说到这里,明天再会!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Cesium中的Event对象源码可以在以下路径中找到: ``` Cesium/Source/Core/Event.js ``` 以下是Event对象的基本结构和实现: ```javascript function Event() { this._listeners = []; this._scopes = []; } Object.defineProperties(Event.prototype, { numberOfListeners : { get : function() { return this._listeners.length; } } }); Event.prototype.add = function(listener, scope) { // 将新的监听器和作用域添加到内部数组中 this._listeners.push(listener); this._scopes.push(scope); }; Event.prototype.remove = function(listener, scope) { // 在内部数组中查找并删除指定的监听器和作用域 for (var i = 0; i < this._listeners.length; i++) { if (this._listeners[i] === listener && this._scopes[i] === scope) { this._listeners.splice(i, 1); this._scopes.splice(i, 1); break; } } }; Event.prototype.raiseEvent = function() { // 以当前作用域调用所有监听器 var length = this._listeners.length; for (var i = 0; i < length; i++) { this._listeners[i].apply(this._scopes[i], arguments); } }; ``` Event对象是Cesium中的一个基础工具,用于实现事件的订阅和发布。它包含了一个内部数组,用于存储所有订阅该事件的监听器和作用域。当事件被触发时,Event对象会以当前作用域调用所有订阅该事件的监听器。同时,Event对象还提供了add()和remove()方法,用于动态添加或删除事件监听器。 ### 回答2: Cesium 是一个用于构建地球上任何规模的 3D 地球应用程序的开源 JavaScript 库。Cesium Event 对象源码是 Cesium 库中用于处理事件的核心部分之一。 Cesium Event 对象在底层实现了事件的发布和订阅机制。它允许开发者在应用程序中定义自定义事件,并能够将事件发布给感兴趣的订阅者。这个机制使得不同部分之间可以进行松散的耦合,提高了代码的模块化和可重用性。 在 Cesium Event 对象的源码中,关键的部分是一个可观察者模式的实现。它包含了通过维护一个事件列表来存储事件的订阅者,并提供了主要的操作方法,如订阅,取消订阅和发布事件。这个机制允许开发者在代码中注册想要监听的事件,并在需要时触发这些事件来通知已订阅的对象。 具体来说,Cesium Event 对象的源码主要包括以下几个部分: 1. `Subscription` 类:表示一个订阅对象,它包含了订阅者的回调函数和其他相关信息。 2. `Event` 类:表示一个事件对象,它维护了一个订阅者列表,并提供了订阅、取消订阅和触发事件的方法。 3. `Eventful` 类:表示一个具有事件机制的对象,它继承了 `Event` 类,并可以通过调用 `subscribe` 方法来注册事件监听器,以便在事件被触发时执行相应的回调函数。 通过使用 Cesium Event 对象,开发者可以轻松地实现事件驱动的编程模式,并构建出更加灵活和可扩展的应用程序。这个源码的设计和实现考虑了高效性能和可维护性,为开发者提供了一种方便和强大的工具来处理事件相关的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值