异步编码—事件处理

在js里面,事件指的是什么

用户单击按钮、鼠标位置发生变化、通过网络收到数据、窗口大小发生变化、定时器到期、浏览器发生变化、用户提交了表单、知道用户按下了键盘按钮、知道元素获得了用户界面焦点、监视所有的鼠标移动、监视时钟并管理定时器和定时事件、获取网页所需的额外数据、跟踪用户缩放或滚动网页的操作、知道cookie已创建完毕、跟踪用户在网页上执行的所有单击操作,无论单击的是安妮、链接还是其他地方、知道网页已经加载并显示完毕。

事件处理程序是什么?

实际上即使一小段代码,知道事件发生时该如何做。从代码的角度说,处理程序就是一个函数。事件发生时,其处理程序函数将会被调用

新的代码组织方式

以响应事件的方式组织代码是另一种代码编写方式。要以这种方式编写代码,需要考虑的是可能发生的事件以及代码如何响应这些事件。在计算机科学种,通常说这种代码是异步。将各种事件的众多处理程序整合起来,构成一个应用程序

创建一个游戏来理解事件

理解事件的最佳方式是实践。

游戏描述

这个游戏是这样的:你加载一个网页,它显示一幅图像。这幅图像不是普通的图像,而是一幅非常模糊的图像。它的任务是猜出图像是什么,要核实你是否猜对了,可单击图像,让它不再模糊不清。当图像清晰几秒之后,重新变回模糊版本

实现游戏

浏览器加载html页面后,你将看到非常模糊的图像。为实现这个游戏,需要用户单击这副图像做出反映,将图像的清晰版本呈现出来。

我需要做的是:

  1. 访问DOM中的这个图像对象,并将其属性onclick设置为一个处理程序
  2. 在这个处理程序中编写代码,将图像的src属性从模糊图像改为清晰图像

确保这些代码在网页的DOM创建好之后再执行,为此,可使用windows对象的属性onload.将这些代码放在init中,并将属性onload设置这个函数。

1 window.onload=init;

function init(){ 2 var image=document.getElementById("zero"); 3 image.onclick=showAnswer;
}

 

要添加一个响应图像单击事件的处理函数,只需将一个函数赋给图像的属性onclick.下面将这个函数命名为showAnswer并定义它

    function showAnswer(){
        var image=document.getElementById("zero");
        image.src="zero.jpg";
    }

如果我们有一系列图像,我们先将它们添加到网页中,我们再添加五幅图像,这样网页将总共包含6副图像。我们还修改css,让图像之间有一定的间距。

<body>
    <img id="zero" src="../zeroblur.jpg">
    <img id="one"  src="../oneblur.jpg">
    <img id="two"  src="../twoblur.jpg">
    <img id="three"  src="../threeblur.jpg">
    <img id="four"  src="../fourblur.jpg">
    <img id="five"  src="../fiveblur.jpg">
    <img id="six"  src="../sixblur.jpg">
</body>

 

如何将同一个处理程序应用于所有图像

function init(){
        var image=document.getElementsByTagName("img");
        for(var i=0;i<image.length;i++){
            image[i].onclick=showAnswer;
        }
使用getElementsByTagName,这个方法将一个标签名作为参数,并返回一个列表,其中包含所有匹配的元素

事件对象的工作原理:

单击事件程序被调用时,将向他传递一个事件对象。事实上,大多人文档对象模型事件发生的时候,都应向第项的处理程序传递一种事件对象。事件对象包含一些事件的常规信息。

事件对象所包含的的信息被称为eventObj,将会放在被调用的函数参数中。

1     function showAnswer(eventObj){
2         var image=eventObj.target;
3         var name=image.id;
4         name="../"+name+".jpg";
5         image.src=name;
6         
7     }
DOM事件的事件对象包含的一些属性

 

 

当图像清晰几秒之后,重新变回模糊版本

 1 function showAnswer(eventObj){
 2         var image=eventObj.target;
 3         var name=image.id;
 4         name="../"+name+".jpg";
 5         image.src=name;
 6         
 7         setTimeout(reblur,2000,image);
 8     }
 9     function reblur(image){
10         var name=image.id;
11         name="../"+name+"blur.jpg";
12         image.src=name;
13     }
setTimeout第一个参数是处理程序,第二个参数是过多少毫秒之后调用事件处理程序,第三个参数是要重新变模糊的图像
posted @ 2022-04-22 21:23  炸鸡好吃真好吃  阅读(47)  评论(0编辑  收藏  举报