0

我正在寻求帮助

我有我找到并尝试 tweek 的代码。它可以工作,但从目前有 26 个相册中获取图像。我只想随机获得 11 个并添加到 div 中。如果您能提供帮助,那就太好了。我尝试添加历史记录,以便至少在相同显示的 11 张照片中不会使用索引。如果有人也可以帮助在功能上清理它,那就太好了。我为在车祸中丧生的侄女免费做这件事。

http://jsfiddle.net/ad5qa/2JjbV/

$.fn.fbPhotos = function (album, limit) {

    function base_append(obj) {
            $(base).append(obj);
    }

    function getPhoto(obj) {

            var id = obj.id;
            var img = obj.img;
            var link = obj.link;


            var wrap = $('<div></div>').attr({
                    'class': 'fb-photo',
                    'id': id
            });


            var avatar = new Image();
            avatar.src = img;

            var _avatar = $('<a></a>').attr('href', link).attr('target', '_blank').attr('class', 'avatar').html(avatar);

            $(wrap).append($(_avatar));
            return wrap;

    }

    function init() {
            fetch();

    }



    function fetch() {
            var r;
            var data = {};

            $.ajax({
                    url: 'https://graph.facebook.com/' + albumId + '/photos?type=small&limit=' + topLimit,
                    type: 'GET',
                    dataType: 'jsonp',
                    data: data,
                    success: function (obj) {
                            //    console.log(obj);
                            if (obj.error) {
                                    /*       var img = new Image();
                                 img.src = theme_url + '/images/ico_fail_bird.png';
                                 wipe(img); */
                                    return false;
                            } else {

                                    var results = {};


                                    for (var k = 0; k < obj.data.length; k++) {
                                            if (obj.data[k].images) {
                                                    results[k] = {
                                                            'id': obj.data[k].id,
                                                            'img': obj.data[k].images[8].source,
                                                            'link': obj.data[k].link
                                                    };
                                            }
                                    }

                                    k = 0;
                                    var hist = [];
                                    for (var w = 0; w < 11; w++) {
                                            var rnd = Math.floor((Math.random() * obj.data.length - 1) + 1);
                                            if ($.inArray(rnd, hist) == -1) {
                                                    hist.push(rnd);
                                                    $('.vcard').append(rnd + ' - ');
                                                    base_append(getPhoto(results[rnd]));
                                                    k++;
                                                    if (k >= topLimit) {
                                                            break;
                                                    }
                                            }

                                    }



                                    if (hist.length > obj.data.length - 2) hist = null;

                                    (function showNext(jq) {
                                            jq.eq(0).show("slide", null, 100, function () {
                                                    (jq = jq.slice(1)).length && showNext(jq);
                                            });
                                    })($('div.fb-photo'));

                                    return true;
                            }
                    },
                    error: function (obj) {
                            // @todo: do something like append an error message or an error image
                            /*  var img = new Image();
                        img.src = '/images/fail.png';
                        wipe(img); */
                            return false;
                    }
            });



    }

    if ($(this).size() > 0) {
            var base = $(this);
            var topLimit = (limit ? limit : 50);
            var albumId = (album ? album : ($(this).attr("fbAlbum") ? $(this).attr("fbAlbum") : '0'));

            init();
    }

};


$(".block-facebook").fbPhotos();
$(document).ready(function () {
    setInterval(function () {
            $(".block-facebook").fbPhotos();
    }, 5000);
});
4

2 回答 2

0

结果实际上是我自己写的,现在它可以工作了。也实现了fancybox。自从搞乱 json 和 javascript/livescript 以来已经有好几年了。

    function getthumbs(gallery_id) {
        viewer = $('#viewer'), thumbs = $('#thumbs');
        var hist = [];
        var rnd = 0;

        $.getJSON('//graph.facebook.com/' + gallery_id + '/photos?callback=?', function (json, status, xhr) {
            var imgs = json.data;
            $('#thumbs img').remove();

            for (i = 0; i < 12; i++) {
                rnd = Math.floor((Math.random() * imgs.length - 1) + 1);

                $('<img src="' + imgs[rnd].images[8].source + '">').appendTo(thumbs).fancybox({
                    href: imgs[rnd].images[3].source
                }); 
            }

        });
    }
    getthumbs('425912634133232');

    $(document).ready(function () {
        setInterval(function () {
            getthumbs('425912634133232');
        }, 20000);
    });
于 2012-09-23T22:23:57.633 回答
0

我认为您topLimit在初始化之前正在使用它。除此之外,您需要获取所有图片的所有 URL,而不仅仅是在返回数组中随机选择其中一些。

于 2012-09-22T19:57:44.357 回答