首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图像加载$.Deferred() jQuery

图像加载$.Deferred() jQuery
EN

Stack Overflow用户
提问于 2014-07-06 13:50:16
回答 1查看 1.2K关注 0票数 0

我对jQuery很陌生,一个困扰我的问题是网站的加载速度,特别是当网站的内容(如图片)可以被用户上传到任意大小的时候。

我决定深入研究异步映像加载领域,并编写了以下代码:

为了舒适起见,这里是jsfiddle:http://jsfiddle.net/2BSvn/6/

这是代码:

代码语言:javascript
复制
var images = [
    'http://homepages.cae.wisc.edu/~ece533/images/airplane.png',
    'http://homepages.cae.wisc.edu/~ece533/images/baboon.png',
    'http://homepages.cae.wisc.edu/~ece533/images/girl.png',
    'http://homepages.cae.wisc.edu/~ece533/images/tulips.png'
];
function loadImage (images) {

    if (!images.length) {
        return;
    }
    function deferLoading (deferred) {

        var url = images.shift();

        var image = new Image();

        image.onload = loaded;
        image.onerror = errored; 
        image.onabort = errored; 

        image.src = url;

        function loaded() {
            unbindEvents();

            deferred.resolve(image);
            deferred.done(function(image) {

            var img = '\<img src="'+image.src+'" width="200" height="200"   alt="sdfsd" />';
            $('body').append(img);


            });



        }
        function errored() {

            unbindEvents();
            deferred.reject(image);

        }
        function unbindEvents() {

            image.onload = null;
            image.onerror = null;
            image.onabort = null;

        }
    };

    var Deferred = $.Deferred(deferLoading);

    loadImage(images);

    return Deferred;
};

loadImage(images);

我的问题是:图像最终都会被延迟并显示在一起。

我想做的是:显示第一张图像,比第二张,第三张和第四张;

我今天一整天都在努力做这件事,似乎我只是不明白$.Deferred in jQuery的概念。

更新:

我的缺点是,我用本地文件进行测试,它们都加载得太快了,我认为脚本不起作用。我使用来自服务器的文件进行了测试,并且脚本按照预期的方式工作。我的错,对不起。

EN

回答 1

Stack Overflow用户

发布于 2014-07-06 16:50:39

试一试

代码语言:javascript
复制
var imgs = function (delay) {
    var callback = function () {
           console.log($("img[alt=sdfsd]").size() + " images loaded");
    };
    var images = [
        'http://homepages.cae.wisc.edu/~ece533/images/airplane.png',
        'http://homepages.cae.wisc.edu/~ece533/images/baboon.png',
        'http://homepages.cae.wisc.edu/~ece533/images/girl.png',
        'http://homepages.cae.wisc.edu/~ece533/images/tulips.png'];
    $.when(images).then(function (_imgs) {
        var i = 0;
        var s = setInterval(function () {
            $("<img>", {
                "src": ($("img[alt=sdfsd]").is("*") ? _imgs[++i] : _imgs[i]),
                    "width": "200px",
                    "height": "200px",
                    "alt": "sdfsd"
            })
                .appendTo("body");

            if ($("img[alt=sdfsd]").size() === images.length) {                

                clearInterval(s);
                callback();

            };
        }, delay);

    });
};
imgs(2500);

jsfiddle http://jsfiddle.net/guest271314/67qUJ/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24596536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档