javascript - 无法加载较高质量的较低质量图像

标签 javascript jquery html

所以我有一个看起来像这样的图像文件夹

- img
-- 001
--- banner_620x350.jpg
--- banner_300x130.jpg
--- banner_180x60.jpg
-- 002
--- banner_300x130.jpg
--- banner_180x60.jpg
-- 003
--- banner_180x60.jpg

我目前加载图片的方式是这样的

<img src="img/003/banner_620x350.jpg" alt="001" onError="this.onerror=null;this.src='img/003/banner_180x60.jpg';" />

因为我们总是有 180x60 的图像,但我们并不总是有 600x350 或 300x130

我想做的是这个

if 600x350 exists uses it
else if does 300x130 exists use it
else use 180x60

PS:我无法检查服务器端。

最佳答案

创建一个函数来检查图像是否可以加载,如果不能,则继续下一个等等。如果所有这些都失败,它仍然返回数组中的最后一个:

function checkSource(src) {
    var def = $.Deferred(),
        res = ['620x350', '180x60', '180x60'];

    (function s(i) {
        $('<img />', {src : (src + '_' + res[i] + '.jpg')}).on({
            load: function() {
                def.resolve(this.src);
            },
            error: function() {
                if (i != res.length-1) {
                    s(++i);
                }else{
                    def.resolve(this.src);
                }
            }
        });
    }(0));
    return def.promise();
};

你可以这样调用它:

checkSource('banner').done(function(file) {
    $('img#banner').prop('src', file);
});

并将源设置为可以加载的任何图像,按照 res 数组的顺序,即按照以下顺序:

banner_620x350.jpg
banner_300x130.jpg
banner_180x60.jpg

FIDDLE

关于javascript - 无法加载较高质量的较低质量图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20165528/

相关文章:

javascript - 需要通过 name 属性隐藏 <tr>

javascript - 如何测试 shouldComponentUpdate 方法?

javascript - 使用 jQuery 在 DatePicker 上禁用今天之后的许多 future 天

java - 将 doTranslate 转换为 rtl

html - CSS 媒体查询,不会读取第一个代码

html - 灯箱的 CSS 背景过渡

javascript - 检测 setInterval 计时器是否在 javascript 中完成

javascript - Windows 8 Market App,JS,访问远程 XML 文件?

javascript - 我将如何在 javascript 中创建命令行界面?

javascript - jquery.cookie.js mod_security 错误 406 和问号