2010-07-04 8 views
4

J'ai une page qui contient un div qui doit être redimensionné via JS lors du chargement d'une page. Pour ce faire, je lui donne une « largeur par défaut » de 760px puis exécutez le code suivant:jQuery - exécution d'une fonction avant document.ready ... mais pas trop tôt

function resizeList() 
{ 
    var wlwidth,iwidth,nwidth; 
    wlwidth = document.body.clientWidth - 200 - 60; 
    iwidth = 320; 
    nwidth = Math.floor(wlwidth/iwidth) * iwidth; 
    $('#list').css('width',nwidth); 
} 

$(document).ready(function(){ 
    // if we're looking at a list, do the resize-thing, now and on window resize 
    if (window.location.pathname.toString().split('/')[1] == "list") 
    { 
     resizeList(); 
     window.onresize = resizeList; 
    } 
}); 

Cependant, la page peut prendre un certain temps à charger que le #list div contient beaucoup d'images. Ainsi, le div est seulement développé pour remplir la largeur correcte après que tout le contenu ait fini de charger. Je ne peux pas simplement le sortir de la fonction $(document).ready car autrement, il ne serait plus possible de dire que document.body n'est pas défini.

Existe-t-il un moyen de redimensionner le div #list avant que tout son contenu ait été chargé?

Modifier
S'il vous plaît voir: http://www.google.com/images?q=whatever
Ils ont accompli ce que je suis en train de faire avec succès. La liste est correctement dimensionnée immédiatement lors du chargement de la page et est ensuite renseignée. Vous pouvez dire qu'ils redimensionnent tout via JS en redimensionnant la fenêtre et en regardant les éléments se déplacer en douceur. Malheureusement, JS de Google est pas le plus facile dans le monde à lire soupir

+0

Vous pouvez essayer de régler l'affichage: aucun; à #list, en changeant sa taille, puis en réglant l'affichage: bloquez-le via jQuery. Je peux me tromper - mais je pense que le navigateur ne chargera pas les images à l'intérieur d'un div caché. – Marko

+0

idée très intéressante! Je vais essayer ... bien que cela se dégradera très mal pour les utilisateurs non-JS, masquant irrévocablement le #list div – Mala

Répondre

4

Il est en cours d'exécution, dès que possible, $(document).ready est l'événement qui se produit lorsque le Royaume est terminé le rendu.

Vous devez ajouter un chargement de l'écran de chargement, puis l'éliminer après l'avoir redimensionné.

+0

Si le navigateur peut comprendre un DOM partiel assez pour l'afficher, je pense qu'il devrait être capable pour signaler la largeur de la fenêtre ... Je peux me tromper bien sûr – Mala

+0

Le lien a été retiré rétrospectivement pour des raisons de confidentialité car nous ne sommes pas encore prêts à être exposés au public, donc j'apprécierais que vous le retiriez de votre commentaire. Merci pour la suggestion si! Cependant, google image search semble accomplir exactement ce que j'essaye d'accomplir, seulement ils le font avec succès;) – Mala

+0

@Mala - C'est parce que les colonnes sont initialement statiques et le réarrangement se produit une fois que le DOM est prêt (encore, avec JS) . Peut-être que vous devriez jouer avec une largeur par défaut pour votre DIV et quand le DOM est prêt, vous obtenez le DIV ajusté avec le JS. –

Questions connexes