2011-11-30 93 views
5

在FB.Canvas API中,有一些方法可以获取滚动顶部,顶部偏移量和客户端高度(通过getPageInfo()),但我需要一种方法来查找顶部最多的窗口滚动位置,以便确定我需要的区域对客户来说是可见的。用户将通过表单进行制表并且比大多数屏幕更高。我需要确保表单项是可见的。有没有办法在Facebook API中获取窗口滚动位置?

回答

4

看起来,getPageInfo()。scrollTop属性和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; 
} 

搜索在线对于其他功能的名称,你会发现其余的代码。

0

与定位方面的回答相同的一般方法,一旦你有你的滚动位置,但我认为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/

相关问题