在JS高级程序设计里,解释是:事件就是文档浏览器窗口中发生的一些特定的交互瞬间。感觉这对新手来说,书上的解释还是不能很好理解,还是不是很具体。一说事件大家知道点击事件,鼠标事件等等,但是我查了资料还是不能像同学解释清楚什么是事件?
在JS高级程序设计里,解释是:事件就是文档浏览器窗口中发生的一些特定的交互瞬间。感觉这对新手来说,书上的解释还是不能很好理解,还是不是很具体。一说事件大家知道点击事件,鼠标事件等等,但是我查了资料还是不能像同学解释清楚什么是事件?
不如解释成动作吧,指定的动作对应指定的处理函数,叫事件也没什么不好理解的吧,难道会和那种订阅/发布的事件混淆?其实也差不多啊,绑定处理函数相当于(subscribe),各种交互触发相当发布(dispatch)。
事件就是消息。进一步说,就是提前约定好的具有特定格式和含义的消息。
当你收到一条消息时,意味着你需要去某件事情来响应这条消息了。
举例:智能手机的闹钟功能
你设定一个闹钟用来提醒你起床,又设定一个闹钟提醒你吃午饭,又设定一个闹钟提醒你去跑步。
当闹钟响起时,就意味着你收到一条消息(或者说发生了一个事件)。根据消息(事件)的具体内容,比如name='跑步',你就可以知道你需要做什么了。你要做的事情就是对这个事件的响应。
JS 里的事件基本分类
元素事件-HTMLEvents [change,click,...]
鼠标事件-MouseEvents [mousemove,mousedown,mouseup,mouseover]
键盘事件-KeyboardEvents [keydown, keypress, keyup]
一个典型的事件绑定及解绑函数
function bind(elem, event, func, bool) {
bool = bool || false;
if (elem.addEventListener)
elem.addEventListener(event, func, bool);
else if (elem.attachEvent)
elem.attachEvent('on' + event, func);
}
function unbind(elem, event, func, bool) {
bool = bool || false;
if (elem.removeEventListener)
elem.removeEventListener(event, func, bool);
else if (elem.detachEvent)
elem.detachEvent('on' + event, func);
}
事件模型, IE和其他浏览器采用了不同的方案来处理,一个是从上往下,另一个是从事件发生的元素向上传递通知事件。
一般的事件处理模型
选择DOM树中的元素,监听事件,用户触发事件,调用事件的回调函数处理事件。
创建自定义的事件,当对象发生改变时,触发事件,通知已注册的回调函数。
事件就是消息,就是广播~~~
消息有特定目标的消息和无具体目标的消息
消息发送出去了,可以有人响应,也可能没人理睬
想要收到消息,那么就需要订阅,就需要addEventListener
既然说到形象,那我就把我们浏览的页面比喻成见一个朋友吧。
朋友一见到你,向你打招呼。
在这个过程中,见到你对这个朋友来说就是一个事件,这个事件包含了你这个人的信息,见到你的时间地点等等;向你打招呼就是见到你这个事件的回调函数结果啦,他根据事件中你的个人信息和其他信息,决定是否要和你打招呼,怎么跟你打招呼,是不是要吓你一跳等等。--> 相当于body的onload事件
朋友和你打招呼之后,你们开始聊天。你问他:“最近过得怎么样?”,他说:“还可以。”
在这里,你问他对这个朋友来说,是一个事件;“最近过得怎么样?”这个信息包含在事件中;朋友回答你的问题是这个事件的回调函数结果,基于事件的信息,他回答了“还可以”。
再举个现在的例子:
我看到题主这道题,写下参考答案。题主看后无感。
看到题主这道题对我来说是事件,写下参考答案是我对这个事件的回调函数结果,题主看到这个答案对题主是事件,无感是题主对此事件的回调函数结果。在题主写下这个问题后,每多一人看到此题,就触发了此人看到此题事件和浏览数+1事件,看到的人有些默默走过,是回调函数的运行结果之一;有些动笔写下答案,是另一种回调函数的运行结果。不同的人看到,触发了同一个事件,但每个人的回调函数不同,所以产生了不同的结果。
从这里就可以看到从题主提问,到题主得到回答,整个过程都有事件贯穿其中,有些不可见,有些可见,充当着我们交流的媒介。
举个例子,如果你的大脑是浏览器,由于常年的加班让你觉得有必要提醒下老板加工资(产生需求)。当老板(对象)穿着阿迪达斯人字拖(属性)吃着火锅唱着歌(方法)走进办公室(条件判断,亦可理解为监听老板进来这一事件),你一把抄起海盗船钛金机械键盘给了他一耳光,把他人字拖扔了(监听器为true时所执行的动作,此例为操作对象)
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
我觉得已经够通俗了,如果再通俗点:
事件就是你在浏览器上浏览网页时做出的“行为”,可以把任何操作都看作行为(点击,滑动等等),毕竟你不可能坐在电脑前一动不动吧!