Событие прокрутки в приложениях Facebook Canvas - PullRequest
5 голосов
/ 09 декабря 2011

Я хочу использовать технику LazyLoad для изображений и бесконечную прокрутку для загрузки нового контента на мою страницу. Обе эти вещи используют функцию $(window).scrollTop(), которая внутри приложения Facebook не работает. Я знаю, что могу использовать FB.Canvas.getPageInfo() для получения текущего значения scrollTop, однако у меня возникают некоторые проблемы с производительностью, мой код выглядит следующим образом:

var oldScroll = 0;       // current scroll 
var newScroll = null;    // new scroll (fetched from FB.Canvas)

// Override the normal function to work within fb
// !!This seems to kill the browser
$.fn.scrollTop = function() {
    return FB.Canvas.getPageInfo().scrollTop;  
};

// poll to check for any changes in scroll
setInterval(function() {
    newScroll = FB.Canvas.getPageInfo().scrollTop; 

    if(oldScroll != newScroll) {     // have we scrolled at all?
        oldScroll = newScroll;
        $(window).trigger($.Event('scroll'));   // fire a scroll event to keep the rest of the application that is listening
    }
}, 1000);

Это нормально, если я не отменяю функцию scrollTop, но, как только я это сделаю, мой браузер скоро вылетает.

Я иду по этому поводу совершенно неправильно? Кто-то уже создал способ сделать это внутри холста FB? Приветствия.

Ответы [ 2 ]

2 голосов
/ 30 января 2012

Я пытаюсь решить ту же проблему, и мое решение - это дополнительный элемент (div # xscroll, pos: abs, L) внутри приложения Facebook + setInterval:

function wininfo() {
    FB.Canvas.getPageInfo(
        function(info) {
            $('#xscroll').height(info.clientHeight+info.offsetTop+info.scrollTop).trigger('scroll');
        }
    );
};

теперь вы можете использовать этот #xscrollдля LazyLoad:

$(".img").lazyload({threshold:400,effect:"fadeIn",skip_invisible:true,container:'#xscroll'});

проблема в том, что процессор загружается очень интенсивно, а FB.Canvas.getPageInfo, мой интервал составляет 2000, а загрузка процессора высокая.После часа работы скрипта - Safari тормозит и память просачивается ...

1 голос
/ 21 декабря 2011

Вы настаиваете на переопределении функции scrollTop()? Первоначально он работает для любого элемента, который вы предоставляете с помощью селектора jQuery, в то время как вы, похоже, ограничиваете его только холстом facebook. Если любой другой javascript попытается использовать scrollTop(), он с треском провалится, не так ли?

Что касается решения, я выполнил бесконечную прокрутку почти таким же образом - setInterval(), чтобы увидеть, достигли ли вы дна, затем загрузить контент, затем снова проверить прокрутку и так далее. Но я не запускаю исходное событие прокрутки окна в любое время, так как в этом нет необходимости - по крайней мере, в моем случае.

...