2011-11-30 98 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/

相關問題