0

助けを求めています

私が見つけて微調整しようとしているコードがあります。動作しますが、現時点で 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

実際に自分自身を書くことになりましたが、今のところうまくいきます。ファンシーボックスも実装。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 に答える