JS事件驱动机制

还记得当初学JAVA-GUI编程时学习过事件监听机制,此时再学习JavaScript中的事件驱动机制,不免简单。当初学习时也是画过原理图,所以从原理图开始吧!

js是采用事件驱动(event-driven)响应用户操作的。比如通过鼠标或者按键在浏览器窗口或者网页元素(按钮,文本框...)上执行的操作,我们称之为事件(Event)。由鼠标或热键引发的一连串程序的动作,称之为事件驱动(Event-Driver)。对事件进行处理程序或函数,我们称之为事件处理程序(Event Handler)。

事件的分类

鼠标事件

当用户在页面上用鼠标点击页面元素时,对应的dom节点会触发鼠标事件,主要有click、dblclick、mousedown、mouseout、mouseover、mouseup、mousemove等。

键盘事件

当用户用键盘输入信息时,会触发键盘操作事件。主要包括keydown、keypress、keyup三个。

HTML事件

在html节点加载变更等相关的事件,比如window的onload、unload、abort、error,文本框select、change等等。

其它事件

页面中一些特殊对象运行过程中产生的事件,比如xmlhttprequest对象的相关事件。

如下例:

作为第一个案例,会遇到一个问题如下:

代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>鼠标事件</title>
    <script type="text/javascript">
        function test(e) {
            window.alert("x = "+ e.cientX + " y =" + e.clientY);
        }
    </script>
</head>
<body onmousedown="test(event)">

</body>
</html>

以上代码的作用是,在鼠标按下后,弹出窗口显示x、y的坐标。

这段代码在IE9、Chrome下都不可以正常运行。这到底是什么原因呢?

后来,我就搜索了一下,发现有人和我有同样的问题,他也解决了,我是参考js的onmousedown事件放在<body>标签下与firefox浏览器所产生的问题这篇文章的。

原来是body的原因。

于是,我就给body加了个宽高试试:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>鼠标事件</title>
    <script type="text/javascript">
        function test(e) {
            window.alert("x = "+ e.clientX + " y =" + e.clientY);
        }
    </script>
</head>
<body style="width: 1000px; height: 800px; border: 1px solid red;" onmousedown="test(event)">

</body>
</html>

我们不难发现,当我们没有给body设置宽高时,body的范围仅仅是一条线,所以onmousedown事件也就无法响应。所以,在给body设置宽高后,我们就可以在body的宽高范围响应onmousedown事件了。

时间: 2024-10-12 21:34:32

JS事件驱动机制的相关文章

javascript(js)基础:事件驱动机制

<script language="JavaScript"> //事件驱动 function test1(){ alert('aaassssssssssssssssssssss') //window.alert('x='+e.clientX+'y='+ e.clientY); } </script> <body onmousedown="test1()" style="border: solid 1px red;width:

由Node.js事件驱动模型引发的思考

引言 近段时间听说了Node.js,很多文章表述这个事件驱动模型多么多么优秀,应用在服务器开发中有很大的优势,本身对此十分感性去,决定深入了解一下,由此也引发了一些对程序设计的思考,记录下来. 什么是Node.js Node.js在官网上是这样定义的:"一个搭建在Chrome JavaScript运行时上的平台,用于构建高速.可伸缩的网络程序.Node.js采用的事件驱动.非阻塞I/O模型使它既轻量又高效,是构建运行在分布式设备上的数据密集型实时程序的完美选择." Node.js的事件

node.js零基础详细教程(4):node.js事件机制、node异步IO操作

第四章 建议学习时间3小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑.编写接口,最后完成一个完整的项目后台,预计共10天课程. node.js事件机制 node.js是单线程,但是通过事件和回调支持并发,可以实现非常高的性能. node.js所有的API都是通过异步调用.第一堂课的时候,我们写过一个同步和异步的示例(如下),当初说到:同步代码先执行完成,然后才执行异步

JS预处理机制

IE中界面加载顺序为从上往下加载..同步加载..如 一个界面 70多个请求的情况下. 导致页面加载及其慢. JS预处理机制: 大概原理: 用XMLHTTP取得脚本的内容,再创建Script对象,另外注意编码保持一致,因为服务器和XML使用UTF8的编码传送数据.类似于预报加载这些js脚本文件.界面上尽量不要出现没有必要引用的js文件,减缓页面加载速度不说,还容易出现js错误.      实现方式: 1-3种方法是异步的,基本上都在一个主界面(需优化的界面上采取,动态写,改,生成一个script脚

ASP.NET 事件驱动机制

关于 ASP.NET Web窗体应用程序,以前在项目中项目中也一直在使用,但直到最近才了解到 Web 窗体应用程序的核心之一事件驱动,做 Web 窗体应用程序的人都在应用这个特性,但是不是每个人都了解这个特性,简而言之,就是每一个Button控件都有一个独立的事件,通过点击不同的 Button 来执行不同的后台事件,进而实现不同的业务流程. 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=&

Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制

Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制 1. 语法错误(ERROR)和运行期错误(Exception) 1 2. 错误类型判断 二种方法: 1 3. 我们常接触到的异常包括: 2 4. ------代码 2 5. 参考 4 1. 语法错误(ERROR)和运行期错误(Exception) Javascript提供了两种特殊的错误处理方式 BOM包含一个onerror事件处理函数,这个window对象与图像对象上都有 同时EC

Redis源码解析:13Redis中的事件驱动机制

Redis中,处理网络IO时,采用的是事件驱动机制.但它没有使用libevent或者libev这样的库,而是自己实现了一个非常简单明了的事件驱动库ae_event,主要代码仅仅400行左右. 没有选择libevent或libev的原因大概在于,这些库为了迎合通用性造成代码庞大,而且其中的很多功能,比如监控子进程,复杂的定时器等,这些都不是Redis所需要的. Redis中的事件驱动库只关注网络IO,以及定时器.该事件库处理下面两类事件: a:文件事件(file  event):用于处理Redis

Nginx——事件驱动机制(惊群问题,负载均衡)

事件框架处理流程 每个worker子进程都在ngx_worker_process_cycle方法中循环处理事件,处理分发事件则在ngx_worker_process_cycle方法中调用ngx_process_events_and_timers方法,循环调用该方法就是 在处理所有事件,这正是事件驱动机制的核心.该方法既会处理普通的网络事件,也会处理定时器事件. ngx_process_events_and_timers方法中核心操作主要有以下3个: 1)  调用所使用事件驱动模块实现的proce

180609-Spring之事件驱动机制的简单使用

文章链接:https://liuyueyi.github.io/hexblog/hexblog/2018/06/09/180609-Spring之事件驱动机制的简单使用/ Spring之事件驱动机制的简单使用 关于事件的发起与相应,在客户端的交互中可算是非常频繁的事情了,关于事件的发布订阅,在Java生态中,EventBus可谓是非常有名了,而Spring也提供了事件机制,本文则主要介绍后端如何在Spring的环境中,使用事件机制 I. 使用姿势 主要借助org.springframework.