DOM中的一个img元素<img id="test" src="xxx">
要判断其是否加载完成,需要这样
var imgOjbect = new Image();
imgOjbect.src = test.src;
imgOjbect.addEventListener('load', fn, false);
那么这是不是意味着图片要被加载两次?
DOM中的一个img元素<img id="test" src="xxx">
要判断其是否加载完成,需要这样
var imgOjbect = new Image();
imgOjbect.src = test.src;
imgOjbect.addEventListener('load', fn, false);
那么这是不是意味着图片要被加载两次?
然而如果加載的資源沒有被緩存,或者緩存剛被刪掉了(在 iOS 上常見),加載兩次是難免的啦。
可能性不能從測試中得出,要用分析得出。只能說一般情況這樣寫沒什麼問題,但是還是不建議。
可以考慮改成
<img src="xxx" onload="foo()">
<script>
function foo() {}
</script>
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
6 回答842 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
如果出于特殊需要,一定要写成LZ的例子那样, 确实是加载两次的
不过如果加载的图片是静态资源,第二次加载不会发出http请求,而是瞬间读取本地缓存完成加载的。
这样做不会有网络上的额外消耗,而对于本地资源的消耗也微乎其微。
常规的只加载1次的做法
或者
补充
猜测
一下为什么会有LZ那种写法,应该是基于下面这种方式改造而来这种情况,如果图片已经载入完毕,中间隔了一段时间,才执行到addEventListener这段代码的话,这个listener是
不会被触发
的,因为已经错过了load事件的时机
。只有在addEventListener之后完成图片的载入,这个listener才会被触发。因此需要重新load一个Image(),src指向需要判断是否load完毕的的src,而这次load无论前者是否加载完毕,都不会有额外网络开销,算是一种比较有意思的做法。