javascript - 使用新的随机刷新 img src

标签 javascript jquery

var rnd = Math.round((Math.random() * (1153 - 1) + 1));
while(!IsValidImageUrl("/engine/achigen/i/"+rnd+".png"))
    rnd = Math.round((Math.random() * (1153 - 1) + 1));
$("#achieve a img").attr("src", "/engine/achigen/i/"+rnd+".png");

我想在页面加载时将指定的图像替换为其他图像。我有图像 1.png..1153.png,但我需要检查图像 src 是否有效。

function IsValidImageUrl(url) {
$("#achieve a img", {
    src: url,
    error: return false,
    load: return true
});
}

我该怎么办?我的方法不对

最佳答案

您可以做的是创建一个基于递归/回调的函数,该函数会重复自身,直到找到有效的 URL。对于回调来说,使用 Promise 模式很方便。

考虑这个应该可以解决问题的示例:

function IsValidImageUrl(url, success, error) {
    return $.Deferred(function () {
        $("#achieve a img", {
            src: url,
            error: this.reject,
            load: this.resolve
        });
    }).promise();
}

function generateImage() {
    var rnd = Math.round((Math.random() * (1153 - 1) + 1));
    return IsValidImageUrl("/engine/achigen/i/" + rnd + ".png").then(function() {
        return "/engine/achigen/i/" + rnd + ".png";
    }, generateImage);
}

generateImage().then(function(url) {
    console.log('valid url', url);
});

在此示例中,IsValidImageUrl 返回一个 Promise 对象,该对象在 url 有效/无效时解析或拒绝。 Helper generageImage 用于调用 IsValidImageUrl 直到找到有效图像。

关于javascript - 使用新的随机刷新 img src,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30989474/

相关文章:

javascript - 使用 Javascript 更改类的字体大小

javascript - 为什么在没有 new 关键字的情况下声明为函数的变量是未定义的?

jquery:函数无法从外部页面运行

javascript - 将 JQuery 代码转换为 Javascript 问题, "prepend"

javascript - 自动点击没有类别和 ID 的链接

Javascript,如果 true 添加字符串

javascript - 在客户端访问嵌套转发器的文本框

javascript - 通过 JS 为 .less 样式表设置 href

javascript - 测试变量的函数

javascript - PhoneGap 禁用缓存