javascript的onload回调问题

JavaScript020

javascript的onload回调问题,第1张

1、 new Image()只是建立一个Image对象,在给src属性赋值之前,图像并没有加载到内存,所以是不会缓存图像的。

2、drawImage()是放在img的onload事件中执行的,也就是说它不是立即执行的,而是等待img的onload事件发生后(也就是img中的图像被加载到内存后)才执行的。这就好比埋地雷,埋完地雷后地雷是不会立刻爆炸的,埋地雷的人可以紧接着去做其他事(比如去其他地方继续埋雷),只有达到触发条件(比如敌人踩上去了)地雷才会爆炸。表面上埋地雷的动作是发生在前面的,但实际的运行结果(爆炸)却是发生在后面的。程序里也一样,表面上drawImage()是放在给src赋值之前,但它实际上是在src赋值之后才运行的。

3、img.onload严格来讲并不叫回调,而是一个事件过程,就是说当这个事件(onload)发生了,它里面的代码才会执行,而如果事件没发生,那么代码是不会主动运行的。事件过程是面向对象编程的一个主要的逻辑结构,比如说鼠标点击(onclick)就是一个很常用的事件,点了鼠标就执行某个操作,而不点鼠标的时候,代码即使放在那里它也不敢擅自运行的。

用递归啊。你肯定已经做了一个方法用来检测当前点周边8个点是否无雷了吧?对于无雷的点逐个再次调用该方法。

以下是伪码示例. isBad是用来检测指定的点是否是雷的方法

function checkRimPoint(x, y) {

    var points = [[x-1,y-1],[x,y-1],[x+1,y-1],[x-1,y],[x+1,y],[x-1,y+1],[x,y+1],[x+1,y+1]

    for(var i = 0i <points.lengthi++) {

        if (! isBad(points[i][0], points[i][1])) {

            showPoint(points[i][0], points[i][1]))//这个不是雷,调用方法显示这个点

            checkRimPoint(points[i][0], points[i][1]))//对该点递归处理

        }

    }

}

以上只是个思路,没有实际价值哦,我记得展开后的效果一种可能是到边界了,另一种可能就是显示周围有几个雷的那种数字框。不过核心就是递归处理。

如果有帮助的话望采纳