2011-11-30 9 views
5

Nell'API FB.Canvas ci sono metodi per ottenere il top di scorrimento, offset superiore e l'altezza del cliente (tramite GetPageInfo()), ma ho bisogno di un modo per trovare la posizione più in alto di scorrimento della finestra in modo da poter stabilire se l'area ho bisogno essere visibili al cliente sono in vista Gli utenti saranno tabulati attraverso un modulo ed è più alto della maggior parte degli schermi. Devo assicurarmi che l'elemento del modulo sia visibile.C'è un modo per ottenere la posizione di scorrimento della finestra a Facebook API?

risposta

4

Sembra che il GetPageInfo(). La struttura, scrollTop e la GetPageInfo(). OffsetTop insieme vi darà la posizione di scorrimento in alto della finestra.

Ecco il codice finale ho usato per scorrere elementi nella vista data la x assoluto/globale e coordinate 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; 
} 

E se per qualche motivo si desidera che l'unica versione HTML (che non funziona se in un iframe all'interno di un altro dominio, come Facebook, ma lavorerà sul proprio sito):

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; 
} 

Ricerca on-line per le altre funzioni con il loro nome e troverai il resto del codice.

0

stesso approccio generale come la risposta in termini di posizionamento Una volta che avete la vostra posizione di scorrimento, ma credo che l'SDK è leggermente cambiata da allora che è stato pubblicato e il GetPageInfo() metodo richiede ora una funzione di callback, in modo da ottenere lo stesso dati iniziali si dovrà iniziare con qualcosa di simile:

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/

Problemi correlati