Facebook Canvas应用程序内的滚动事件

nav*_*nav 5 jquery facebook facebook-javascript-sdk facebook-canvas

我正在寻找使用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);
Run Code Online (Sandbox Code Playgroud)

如果我不覆盖scrollTop函数,但是一旦我的浏览器很快崩溃,它似乎没问题.

我完全错了吗?有人已经在FB画布中创建了一种方法吗?干杯.

bub*_*aba 1

您是否坚持要scrollTop()重写该函数?最初它适用于您通过 jQuery 选择器提供的任何元素,而您似乎将其限制为仅适用于 facebook 画布。如果任何其他 javascript 尝试使用scrollTop(),它都会惨败,不是吗?

至于解决方案,我已经以几乎相同的方式完成了无限滚动 -setInterval()查看是否已到达底部,然后加载内容,然后再次检查滚动,依此类推。但我不会随时触发窗口的原始滚动事件,因为没有必要 - 至少在我的情况下是这样。