Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/12/2015, 20:41
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Centrar y fijar DIV con javascript

Si quieres que el elemento quede centrado incluso cuando se mueve la barra de desplazamiento, tienes que trabajar con el evento scroll. Una forma efectiva de centrar elementos es la siguiente:
Código Javascript:
Ver original
  1. var elem = document.getElementById("id del elemento"), //El elemento
  2.     elemWidth = elem.offsetWidth, //Ancho del elemento
  3.     elemHeight = elem.offsetHeight, //Alto del elemento
  4.     winWidth = window.innerWidth, //Ancho de la ventana
  5.     winHeight = window.innerHeight, //Alto de la ventana
  6.     winX = window.scrollX, //Cantidad desplazada horizontalmente (scroll)
  7.     winY = window.scrollY; //Cantidad desplazada verticalmente (scroll)
  8.        
  9. elem.style.marginTop = (winHeight / 2 - elemHeight / 2) + winY + "px"; //Centrado vertical
  10. elem.style.marginLeft = (winWidth / 2 - elemWidth / 2) + winX + "px"; //Centrado horizontal

Y para que tenga efecto tanto al cargar el documento como al producirse el scroll, hay que tener este script en una función que se ejecute cuando se produzcan los eventos DOMContentLoaded (carga del DOM) y scroll:
Código Javascript:
Ver original
  1. function centrar(){
  2.     var elem = document.getElementById("id del elemento"), //El elemento
  3.         elemWidth = elem.offsetWidth, //Ancho del elemento
  4.         elemHeight = elem.offsetHeight, //Alto del elemento
  5.         winWidth = window.innerWidth, //Ancho de la ventana
  6.         winHeight = window.innerHeight, //Alto de la ventana
  7.         winX = window.scrollX, //Cantidad desplazada horizontalmente (scroll)
  8.         winY = window.scrollY; //Cantidad desplazada verticalmente (scroll)
  9.        
  10.     elem.style.marginTop = (winHeight / 2 - elemHeight / 2) + winY + "px"; //Centrado vertical
  11.     elem.style.marginLeft = (winWidth / 2 - elemWidth / 2) + winX + "px"; //Centrado horizontal
  12. }
  13.  
  14. document.addEventListener("DOMContentLoaded", centrar, false);
  15. window.addEventListener("scroll", centrar, false);

DEMO

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand