2011-09-14 40 views
8

Estoy trabajando en un proyecto donde hay bastante jQuery. Así que cuando voy a la página, puedo ver el jQuery en ejecución (por ejemplo, $.button() elementos en la página todavía aparecen como elementos html normales antes de que se cargue jQueryUI: S) así que inicialmente parece todo feo, una vez que todo el JS está cargado y ejecutado, se ve "agradable".Precargar y ejecutar jQuery/javascript antes de ver la página

No es solo un caso de precarga de imágenes o lo que sea, quiero ejecutar el código jQuery, pero "ocultarlo" a los visitantes para que una vez que se abra, se vea "bien" directamente O muestre una pantalla negra diciendo "Cargando ..." hasta que jQuery haya terminado de ejecutarse.

Mira, pero no estoy seguro de que realmente ejecute el javascript del sitio antes de mostrarlo, pero muestra la idea básica de tener una pantalla oscura que dice "Cargando ..." .. Sospecho que es lo que sucede en las grandes aplicaciones web tales como SlideRocket pesar de que hace uso del flash ...: S

+0

Personalmente, simplemente salgo del sitio. No estoy aquí para ver una imagen de carga purty purty, a menos que no tenga otra opción (ver ExtJS/Dojo API docs). Prefiero que cargues tu página parte por parte o propongas una solución diferente a un problema de rendimiento obvio, que venir a tu imagen de carga. Pero ese soy yo. Estoy seguro de que alguien estará en breve con una pieza de jQuery ya hecha. – ZenMaster

Respuesta

4

Ha respondido la pregunta a sí mismo. Tenga algún tipo de pantalla de carga que oculte la página hasta que se ejecute todo el jQuery.

Pruebe algo como lo siguiente.

Esto va en la parte superior de la página:

<div id="loadingMask" style="width: 100%; height: 100%; position: fixed; background: #fff;">Loading...</div> 

Aquí está tu jQuery:

$(document).ready(function() { 

    /* 
    * ... all of your jQuery ... 
    */ 

    // At the bottom of your jQuery code, put this: 
    $('#loadingMask').fadeOut(); 
}); 
+0

¡me ganó por 30 segundos! – rlemon

+0

Genius. Funciona de maravilla. Corto, preciso, y funciona. Gracias. – meltuhamy

+0

@Matt Bradley, funciona genial también para mí, ¡gracias! ¿Pero quizás tengas alguna idea de cómo no hacer que la página se dispare por un segundo en la primera carga? Intente ingresar a mi sitio: http://soulstudio.eu - puede ver allí que primero ingrese la página completa y parpadee por un segundo. ¿Cómo evitarlo? – user3267302

2

Wrap toda su jQuery que desea "precargado" en esto:

$(window).load(function() { 
    //Your jQuery here 
}); 

o, alternativamente, no todos su código jQuery dentro de ese contenedor. Por el contrario, ponga sus cambios DOM de jQuery en

$(document).ready(function(){ 
    //jQuery 
})) 

y luego tenga un contenedor para todo el contenido de su sitio.

<div id="everything-wrapper"> 
    <!-- put your body here --> 
</div> 

y ajustar la pantalla a ninguno en tu CSS

#everything-wrapper { 
    display : none; 
} 

y luego con la carga ventana como antes

$(window).load(function() { 
    $("#everything-wrapper").show(); 
    // or 
    $("#everything-wrapper").fadeIn("fast"); 
    // to be fancy with it 
}); 
+0

¿Has leído el problema? La mayor parte de la página está cargada, ENTONCES jQuery y jQuery UI se ejecutan, cambiando los botones estándar en los botones de jQuery UI y otros artefactos. –

+0

¿Has leído mi solución? Pruébalo y ve si no funciona. Apuesto a que sí. – SomeShinyObject

+0

Usted entiende que comenté cuando todo lo que estaba allí era su primera solución, ¿verdad? –

0

me gustaría tener un recubrimiento como parte de su CSS estática y HTML, entonces cuando las cargas JQuery a través

$(document).ready() puede ocultar la superposición

0

la respuesta por Chr istopher es probablemente la forma en que FilamentGroup lo hace. Puede tener javascript "precargado", carga en línea con el resto de la página y, debido a que generalmente es más grande que el resto de la página, tarda más en descargarse. No puedes hacer que javascript se cargue primero, esa no es la forma en que funciona.

Sin embargo, el principio para hacerlo funcionar es "ocultar" su página de vista en CSS (o con estilos en línea ya que el CSS todavía tendrá que cargarse) y una vez que todo esté listo en javascript muéstrelo de nuevo. Si observa que hay un espacio entre la página que muestra (nada) y la carga de javascript que se muestra en FilamentGroup.Esto se debe a que ocultan la página, el cargador de JavaScript carga, y una vez que el resto del javascript ha terminado, oculta el cargador y muestra la página.

1

Estaba teniendo un problema similar con un artefacto apareciendo brevemente durante cargas de página en IE8. La solución que utilicé fue cambiar la visibilidad del contenedor a oculto en la línea 1 del css. Luego mostró el elemento al final del archivo jquery. Si css y jquery comienzan a discutir, el elemento no se muestra hasta que se resuelva el argumento.

Cuestiones relacionadas