在匿名时执行的onload事件是在图像执行后发布的吗?
就像你这样做时
var tempImg = new Image()
tempImg.onload = function () {
alert("loaded");
}
tempImg.src = "https://images.google.ca/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png";
或者
<img id='img' />
<script>
var tempImg = document.getElementById("img")
tempImg.onload = function () {
alert("loaded");
}
tempImg.src = "https://images.google.ca/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png";
</script>
如果图像在其他地方更改,是否必须以某种方式清除它以防止事件再次触发?如果是这样,那么正确的方法是什么?刚设置为undefined?你能在里面清楚吗?
答案 0 :(得分:5)
如果您使用onload
属性分配事件监听器,则否,它不会自动释放。在某些情况下,它可以再次触发,例如图像源被修改。您可以将其设置为undefined
或null
或delete
属性来清除它。这可以在事件处理函数本身内完成:
image.onload = function(event) {
delete image.onload;
/* do something */
};
如果您使用addEventListener()
来处理活动,则需要使用removeEventListener()
。我们可以为函数添加一个内部名称,以便我们可以引用它:
image.addEventListener('load', function myLoadHandler(event) {
image.removeEventListener(myLoadHandler);
/* do something */
});
但是,在较新的浏览器中,有一个比这些更好的选择。您可以使用新的once
选项定义一个将自动删除自身的事件侦听器:
image.addEventListener('load', function(event) {
/* do something */
}, { once: true });