javascript - 在ajax回调后隐藏加载gif

标签 javascript jquery ajax

我有一个简单的问题,但找不到明确的答案。我需要在 ajax 调用后加载大量图像,并且我想使用动画 gif 作为预加载器。我正在使用以下代码:

function loadProducts(url) {
    $("#loading").show();
    $('#inner').fadeOut(1).load(url + ' .product-list', function() {
        $('#inner').fadeIn(1000, function() {
            $("#loading").hide();
        });
    });
}

加载 HTML 时隐藏#loading .load(url + '.product-list'。问题是屏幕上仍然呈现沉重的图像,我想继续显示动画 .gif 直到图像渲染完成。有没有办法知道屏幕上的图像何时渲染?。 提前致谢。

最佳答案

您可以使用 promises 来检查所有图像何时加载完毕,然后删除正在加载的 gif。

这会创建一个在图像加载时解析的 promise,所有 promise 都保存在一个数组中,当所有 promises 都解析时,即所有图像都已加载,回调会触发。

function loadProducts(url) {
    $("#loading").show();

    $('#inner').fadeOut(1).load(url + ' .product-list', function() {

        var promises = [];

        $('#inner').find('img').each(function(_, image) {
            var img = new Image(), 
                def = new $.Deferred();

            img.onload = function() {
                def.resolve();
            }

            promises.push( def.promise() );

            img.src = image.src;
            if (img.complete) img.onload();
        });

        $.when.apply(undefined, promises).done(function() {

            $('#inner').fadeIn(1000, function() {
                $("#loading").hide();
            });

        });
    });
}

关于javascript - 在ajax回调后隐藏加载gif,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22754103/

相关文章:

javascript/jQuery 在方法中传递参数

javascript - 如何使用多选小部件过滤 KendoUI 网格?

javascript - 选择 :visible table cell with jquery does not work?

javascript - 如何在 jquery ajax 请求的数据参数中表示 json 数组?

javascript - 将其他地方定义的异步函数包装在回调中

javascript - 如何命名原型(prototype)函数?

javascript - 如何将 GET 参数分配给 HTML 输入文本的值属性?

javascript - 通过 JavaScript 单击消防按钮

jquery - 注册表单上是否需要 CSRF 保护?

javascript - 使用 JavaScript Onclick 事件将数据传递到 Django 中的views.py?