Javascript:通过Javascript加载图像
这是一段来自教程的javascript代码,在教程中,他们试图将图像加载到画布上,然后进行一些操作。我省略了大部分不相关的代码,以便更容易理解 1) 我无法理解为什么包含图像文件名的行总是放在imageObj.onload函数下面。这有关系吗?图像从什么时候开始加载 2) 如果我忘记输入图像文件的源代码,会发生什么Javascript:通过Javascript加载图像,javascript,html,image,Javascript,Html,Image,这是一段来自教程的javascript代码,在教程中,他们试图将图像加载到画布上,然后进行一些操作。我省略了大部分不相关的代码,以便更容易理解 1) 我无法理解为什么包含图像文件名的行总是放在imageObj.onload函数下面。这有关系吗?图像从什么时候开始加载 2) 如果我忘记输入图像文件的源代码,会发生什么 <script> window.onload = function(){ ....
<script>
window.onload = function(){
....
var imageObj = new Image();
imageObj.onload = function(){
....
....
});
....
....
};
imageObj.src = "yoda.jpg";
};
</script>
window.onload=函数(){
....
var imageObj=新图像();
imageObj.onload=函数(){
....
....
});
....
....
};
imageObj.src=“yoda.jpg”;
};
通过设置.src
属性触发加载
在(某些?)较旧的浏览器上,如果在设置属性后注册处理程序,则不会调用该处理程序,特别是如果图像已在缓存中,因此会立即“加载”
如果忘记设置属性,则不会发生任何事情。在设置
src
属性时开始加载。成功加载映像后将调用img.onload
函数。更改src
将触发“加载顺序”,并且由于JS的性质是按顺序执行,因此在加载映像之前必须注册处理程序
不更改
src
不会触发加载顺序。这是一个有点历史性的问题。.onload
和.src
的顺序实际上并不重要(从技术上讲,这两种顺序都有效),问题是一旦设置了src
属性,一些浏览器(一些=Internet Explorer)将从缓存中获取图像(如果可用)
这就是为什么在设置src
之前,您应该始终声明一个onload
处理程序
如果您只是忘记设置src
属性,那么什么也不会发生。如果您不再持有该对象的任何引用或闭包,它将尽快被垃圾收集
window.onload = function(){
// This is function 1
// This portion will execute when window has loaded completely.
// In simple words, page has been downloaded completely.
var imageObj = new Image();
imageObj.onload = function(){
// This is function 2
// This portion will execute when image has loaded completely
});
....
....
};
imageObj.src = "yoda.jpg";
因此,函数1和函数2将在此行之后执行imageObj.src=“yoda.jpg”代码>
这是你第一个问题的答案。放在下面并不意味着它将在函数2之后执行。在javascript中,代码从上到下顺序执行,但函数中的代码只有在调用该函数时才会执行
如果您不提供src
属性,则将没有图像可下载,因此不会调用函数2。您是否尝试过不将图像文件的源代码放入以查看会发生什么?如果您从.onload
和.src
切换顺序,它也将在所有浏览器中工作。顺序很可能是因为InternetExplorer的缓存问题,InternetExplorer在设置.src
后立即从缓存中获取图像。@jAndy请让您对答案进行评论,因为这里给出的三个答案在这一点上都是错误的。@jAndy是的,这完全正确,但不幸的是,我们仍然必须支持旧的MSIE版本:(