En la API de FB.Canvas hay métodos para obtener la parte superior, la parte superior y la altura del cliente (a través de getPageInfo()), pero necesito una manera de encontrar la posición más alta de desplazamiento de la ventana para poder determinar si el área que necesito para ser visible para el cliente están a la vista. Los usuarios estarán tabulando a través de un formulario y es más alto que la mayoría de las pantallas. Necesito asegurarme de que el elemento del formulario esté visible.¿Hay alguna manera de obtener la posición de desplazamiento de la ventana en Facebook API?
Respuesta
Parece que la propiedad getPageInfo(). ScrollTop y getPageInfo(). OffsetTop juntos le darán la posición de desplazamiento de la ventana superior.
Aquí está el código final que usé para desplazar los elementos a la vista dadas las coordenadas absolutos/globales xey.
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;
}
Y si por alguna razón desea que la única versión HTML (que no va a funcionar si en un iframe dentro de otro dominio como Facebook pero trabajará en su propio sitio):
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;
}
búsqueda en línea para las otras funciones por sus nombres y encontrarás el resto del código.
enfoque general como la respuesta en términos de posicionamiento una vez que tenga su posición de desplazamiento, pero creo que el SDK ha cambiado ligeramente desde que se publicó y el método getPageInfo() ahora requiere una función de devolución de llamada, para obtener el mismo datos iniciales que tendrá que empezar con algo como:
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/
- 1. Obtener la posición del ratón en desplazamiento
- 2. ¿Cómo determino la altura y la posición de desplazamiento de la ventana en jQuery?
- 3. jQuery en la ventana de desplazamiento animar la posición de la imagen de fondo
- 4. Establecer la posición de desplazamiento
- 5. ¿Hay alguna manera de cambiar la puntuación según la posición de término en Lucene?
- 6. ¿Hay una API para recuperar la actividad reciente de Facebook?
- 7. ¿Hay alguna manera de ralentizar el efecto de desplazamiento?
- 8. ¿Cómo puedo obtener la posición de desplazamiento actual en UIWebView
- 9. Cómo obtener la última posición de vista de desplazamiento, scrollview
- 10. CSS establecer la posición de desplazamiento predeterminada
- 11. jquery: ¿evitar que la ventana cambie la posición de desplazamiento mientras antepone elementos a una lista?
- 12. ¿Hay alguna forma de obtener la altura y el ancho de la barra de desplazamiento?
- 13. Obtener desplazamiento Posición Porcentaje
- 14. ¿Hay alguna manera de deshacer ventana dividida debajo en emacs?
- 15. ¿Hay alguna manera de obtener la representación de cadena del valor de HRESULT con la API de ganancia?
- 16. ¿Hay alguna manera de "reiniciar" la JVM?
- 17. ¿Hay alguna manera de obtener parámetros de línea de comandos en la extensión de Google Chrome?
- 18. ¿Hay alguna manera de utilizar la API de SpeechRecognizer directamente para la entrada de voz?
- 19. cómo recordar la posición de desplazamiento de la página
- 20. ¿Hay alguna manera de insertar a través de Graph API?
- 21. ¿Cómo obtener la posición de desplazamiento desde GridView?
- 22. Obtener la posición actual de la ventana gráfica en Mobile (iPhone) Safari
- 23. ¿Cambiar la posición de la barra de desplazamiento en TextBox?
- 24. Controlando la posición de desplazamiento para el marco principal de la aplicación Facebook iFrame
- 25. ¿Hay alguna manera de acceder a la API de LinkedIn sin un usuario?
- 26. Desarrollando para la API de Facebook sin obtener una cuenta de Facebook
- 27. ¿Hay alguna manera de establecer la barra de desplazamiento vertical para un div?
- 28. ¿Hay alguna manera de obtener atribución para una imagen de fondo en la capa de presentación?
- 29. Android: ¿Hay alguna forma de obtener la última posición de View después de TranslateAnimation?
- 30. Mostrar div cuando la posición de desplazamiento