Html 使用背景的 onerror 事件:url()
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/22287474/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
onerror event using background: url()
提问by Bono
Is there a way to show alternate image if source image is not found? I know to accomplish this is by doing something like below:
如果找不到源图像,有没有办法显示备用图像?我知道要做到这一点,请执行以下操作:
<img src="imagenotfound.gif" alt="Image not found" onError="this.src='imagefound.gif';" />
But how about if you are doing something like this, how can you catch if there is an error or if the image is not found?
但是如果你正在做这样的事情,如果有错误或者没有找到图像,你怎么能捕捉到呢?
<div style="background:url('myimage.gif')"></div>
回答by Oriol
In case myimage.gif
isn't transparent, you could use multiple backgrounds:
如果myimage.gif
不透明,您可以使用多个背景:
background: url('myimage.gif'), url('fallback.gif');
This way fallback.gif
will only be visible if myimage.gif
isn't available.
这种方式fallback.gif
只有在myimage.gif
不可用时才可见。
Note that fallback.gif
may be downloaded even if myimage.gif
is available.
请注意,fallback.gif
即使myimage.gif
可用,也可能会下载。
Alternatively, even though not widely supported, CSS Images 3 introduces the image()
notation:
或者,即使没有得到广泛支持,CSS 图像 3 也引入了image()
表示法:
background: image('myimage.gif', 'fallback.gif');
Multiple
<image-decl>s
can be given separated by commas, in which case the function represents the first image that's not an invalid image.
Multiple
<image-decl>s
可以用逗号分隔,在这种情况下,该函数表示第一个不是 无效图像的图像。
回答by PointedEars
With background images, there is no event; you have check yourself.
使用背景图像,没有事件;你有检查自己。
Make an (XML)HTTP request, and if you get a response with an error status codeor no response at all (after timeout), use another image resource. This approach is limited by the Same-Origin Policy.
发出 (XML)HTTP 请求,如果收到带有错误状态代码的响应或根本没有响应(超时后),请使用其他图像资源。这种方法受到同源策略的限制。
回答by Lars Moelleken
You can also use a dummy-image and use the onerror event from there ...
您还可以使用虚拟图像并从那里使用 onerror 事件...
$imageFoo = '
<div id="' . $uniqueId . '"
style="
background-image: url(//foo.lall/image.png);
-webkit-background-size: contain;
-moz-background-size: contain;
-o-background-size: contain;
background-size: contain;
background-position: center;
background-repeat: no-repeat;
"
></div>
<!-- this is a helper, only needed because "background-image" did not fire a "onerror" event -->
<img style="display: none;"
src="//foo.lall/image.png"
onerror="var fallbackImages = $(this).data(\'404-fallback\'); $(\'#' . $uniqueId . '\').css(\'background-image\', \'url(\' + fallbackImages + \')\');"
data-404-fallback="//foo.lall/image_fallback.png"
>
';