2012-02-06 14 views
7

Encontré una gran cantidad de plugins de ventanas modales, intenté con diferentes opciones de configuración para algunos como SimpleModal, LightBox ... estos son livianos y tienen una configuración flexible, pero me falta una cosa: necesito poder desplazar la ventana modal (cuando exceder en altura) con la barra de desplazamiento del navegador como la galería de facebook modal, o pinterest.com pin vista previa modal, ¿alguna sugerencia?Dónde encontrar jQuery plugin de ventana modal "desplazable"?

Respuesta

4
$(window).scroll(function(){ 
    if($('#ux-dialog-test-container').dialog('isOpen') === true){ 
     var dialogHeight = $('.ui-dialog').height(); 
     var windowHeight = $(window).height(); 
     var documentHeight = $(document).height(); 
     var scrollLength = documentHeight - windowHeight; 
     var currentScrollTop = $(window).scrollTop(); 
     var scrollPercentage = currentScrollTop/scrollLength; 
     var pixelsToSubtract = dialogHeight * scrollPercentage; 
     var newTop = 32 - pixelsToSubtract; 
     $('.ui-dialog').animate({top: newTop + 'px'}, 15, 'swing'); 
    } 
}); 

Sé que esto una vieja pregunta, pero yo estaba luchando con el mismo problema y encontramos este una solución adecuada. Básicamente, da la ilusión de desplazarse por el diálogo modal, cuando en realidad está empujando la parte superior más alta a medida que se desplaza hacia abajo. Calculé el porcentaje de ventana desplazada y usé ese porcentaje para ajustar la propiedad "css:" superior. En mi caso, tuve la parte superior configurada en 32px, como pueden ver, ajusté en mis cálculos. Espero que esto ayude a alguien en alguna parte!

OH! y esto lo que le robé a otro hilo es necesaria en ciertos navegadores para desbloquear el desplazamiento (es decir, en cromo el evento click de la barra de desplazamiento se suprime si modal: true)

if ($.ui && $.ui.dialog) { 
    $.ui.dialog.overlay.events = $.map('focus,keydown,keypress'.split(','), function(event) { return event + '.dialog-overlay'; }).join(' '); 
} 

Sé que esto funciona en IE8 +, así como Chrome y FF.

EDITAR: Se agregó una marca para ver si el diálogo estaba abierto.

Cuestiones relacionadas