onerror event using background: url()

前端 未结 3 752
自闭症患者
自闭症患者 2020-12-23 20:46

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:



        
相关标签:
3条回答
  • 2020-12-23 21:20

    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 code or no response at all (after timeout), use another image resource. This approach is limited by the Same-Origin Policy.

    0 讨论(0)
  • 2020-12-23 21:28

    In case myimage.gif isn't transparent, you could use multiple backgrounds:

    background: url('myimage.gif'), url('fallback.gif');
    

    This way fallback.gif will only be visible if myimage.gif isn't available.

    Note that fallback.gif may be downloaded even if myimage.gif is available.


    Alternatively, even though not widely supported, CSS Images 3 introduces the image() notation:

    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.

    0 讨论(0)
  • 2020-12-23 21:32

    You can also use a dummy-image and use the onerror event from there ...

            $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"
            >
            ';
    
    0 讨论(0)
提交回复
热议问题