是否有一种方法可以在Facebook API中获得窗口滚动位置

Is there a way to get the window scroll position in Facebook API?

本文关键字:API Facebook 位置 滚动 窗口 方法 一种 是否      更新时间:2023-09-26

在FB。Canvas API有方法来获得滚动顶部,偏移顶部和客户端高度(通过getPageInfo()),但我需要一种方法来找到最顶部的窗口滚动位置,这样我就可以确定我需要对客户端可见的区域是否在视图中。用户将在一个表单中点击,它比大多数屏幕都高。我需要确保表单项是可见的。

似乎getPageInfo()。属性和getPageInfo()。offsetTop一起会给你顶部窗口滚动的位置。

这里是最后的代码,我用来滚动元素到视图给定的绝对/全局x和y坐标。

function scrollElementIntoViewFB(applicationID, elementTop, elementBottom) {
    var pageInfo = FB.Canvas.getPageInfo();
    // fallback if running local
    if (pageInfo.clientHeight==0) {
         scrollElementIntoView(applicationID, elementTop, elementBottom);
         return;
    }
    var scrollPosition = pageInfo.scrollTop;
    var viewportHeight = pageInfo.clientHeight;
    var flashOffsetTop = pageInfo.offsetTop;
    var elementAbsoluteTop = elementTop + flashOffsetTop;
    var elementAbsoluteBottom = elementBottom + flashOffsetTop;
    var visibleBottomPosition = viewportHeight + scrollPosition;
    if (scrollPosition>elementAbsoluteTop) {
        FB.Canvas.scrollTo(0, elementAbsoluteTop);
    }
    else if (visibleBottomPosition<elementAbsoluteBottom) {
        FB.Canvas.scrollTo(0, elementAbsoluteBottom-viewportHeight);
    }

    return true;
}

如果出于某种原因你想要HTML版本(这将不工作,如果在一个iframe内的另一个域名,如Facebook,但将工作在你自己的网站):

function scrollElementIntoView(applicationID, elementTop, elementBottom) {
    var scrollPosition = f_scrollTop();
    var viewportHeight = f_clientHeight();
    var flashElement = swfobject.getObjectById(applicationID);
    var flashOffsetTop = flashElement.offsetTop; // not sure if this is cross browser   
    var elementAbsoluteTop = elementTop + flashOffsetTop;
    var elementAbsoluteBottom = elementBottom + flashOffsetTop;
    var visibleBottomPosition = viewportHeight + scrollPosition;
    if (scrollPosition>elementAbsoluteTop) {
        window.scrollTo(0, elementAbsoluteTop);
    }
    else if (visibleBottomPosition<elementAbsoluteBottom) {
        window.scrollTo(0, elementAbsoluteBottom-viewportHeight);
    }
    return true;
}

通过名称在线搜索其他函数,您将找到其余的代码。

相同的一般方法作为在定位方面的答案一旦你有你的滚动位置,但我认为sdk已经略有变化,因为这是张贴和getPageInfo()方法现在需要一个回调函数,所以要获得相同的初始数据,你必须开始类似的东西:

FB.Canvas.getPageInfo(function(info){
  console.log(info);
  //... code for positioning based on fb window
});
http://developers.facebook.com/docs/reference/javascript/FB.Canvas.getPageInfo/