Desarrollo front-end, estándares web, accesibilidad y más
Por kcmr, el 3 de febrero de 2009 en Cajón de sastre, Javascript, Prototype
Supongamos que tenemos las típicas capas emergentes que aparecen al lado de un enlace o icono de ayuda al clicarlo.

Ejemplo de capa emergente que aparece al hacer click sobre un icono de ayuda
Uno de nuestros objetivos es que estas capas siempre aparezcan en el área visible de la ventana del navegador, por lo que, según la posición del enlace que las muestra (más o menos cercano al final de la ventana), deberemos calcular su posición para evitar que puedan aparecer cortadas.

Ejemplo de capa cortada por la ventana del navegador
La librería Prototype nos ofrece unos cuantos métodos para que esta tarea sea más fácil, pero antes de darle demasiadas vueltas (yo por lo menos se las di…), lo mejor es hacerse un esquema.

Con estos datos ya tenemos todo lo que necesitamos para saber si la capa emergente podrá mostrarse parcialmente fuera del área visible de la ventana del navegador. Paso a paso…
Una vez que sabemos cuándo va a aparecer cortada la capa emergente, podemos evitarlo modificando su posición top respecto al documento de la siguiente manera:
Posición top de la capa = altura área visible del navegador + altura del espacio no visible por encima del área visible – altura de la capa.
El código Javascript encargado de hacer todo esto sería:
// posicionTop se ha obtenido previamente mediante element.cumulativeOffset()[1]
// capa hace referencia a la capa emergente (element)
posicionarCapaEnAreaVisible: function(posicionTop, capa){
var posicionRespectoViewport = posicionTop - document.viewport.getScrollOffsets()[1] + capa.offsetHeight;
if(posicionRespectoViewport > document.viewport.getDimensions().height){
posicionTop = document.viewport.getDimensions().height + document.viewport.getScrollOffsets()[1] - capa.offsetHeight;
}
return posicionTop;
}
Supongo que habrá formas más sencillas de hacer lo mismo, y para quien lo quiera “listo para llevar”, siempre le puede echar un vistazo a las capas emergentes y tooltips personalizables de Prototip.
Campos obligatorios marcados con asterisco *
2 comentarios
Por jervert, el 3 de febrero de 2009
Estupenda la última imagen, explicando cada tipo de altura.
Por Lazy Load de imágenes con Mootools | Uninstallme, el 30 de diciembre de 2009
[...] saber si la imagen está en el área visible de la pantalla he utilizado el método explicado en otro post para hacer lo mismo con [...]