Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [preload img] problemi di "sincronizzazione"

    Salve a tutti.
    So che ci sono 1000 post sul preload di immagini, ma il mio e' un caso un po' particolare.
    In pratica devo mostrare un'immagine con una window.open, e la finestra che si apre deve essere dimensionata automaticamente a seconda delle dimensioni dell'immagine. Ho scritto questa funzione javascript
    codice:
      
    function showImg(imgId){ 
         imageT = new Image();
         imageT.src = "img/floppy/"+imgId+"_big.gif";
         wintype = "width="+parseInt(imageT.width +20) + ",height=" + parseInt(imageT.height +25) +",scrollbars=0,resizable=0,statusbar=no,toolbar=no,top=140,left=140";      
         win1 = window.open("img/floppy/"+imgId+"_big.gif",2,wintype);
         win1.focus();
      }
    l'immagine viene precaricata e la finestra viene dimensionata a seconda delle dimensioni di essa.
    Non funziona, o meglio, funziona solo la seconda volta che richiamo lo script, cioè quando l'immagine è gia' stata caricata una volta ed e' quindi salvata in cache...la prima volta che richiamo la funziona si apre una finestra di dimensioni minime

    se volete un esempio andate qui
    http://www.bit-snc.it/tut_disk.php
    e cliccate su un'immagine per avere la versione ingrandita.

    qualcuno sa come risolvere questo strano problema? grazie!


  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Una immagine puo' essere misuarata solo dopo che e' stata caricata... prova a modificare lo script cosi':
    codice:
    imageT = new Image();
    function showImg(imgId){ 
         imageT.src = "img/floppy/"+imgId+"_big.gif";
         setTimeout("misura()",100)  
    }
    function misura() {
         if (imageT.complete) { // e' stata caricata?
              wintype = "width=" + parseInt(imageT.width +20) + 
              ",height=" + parseInt(imageT.height +25) + 
              ",scrollbars=0,resizable=0,statusbar=no" +
              ",toolbar=no,top=140,left=140";      
              win1 = window.open("img/floppy/"+imgId+"_big.gif","2",wintype);
              win1.focus();
         } else {
              setTimeout("misura()",100)  
         }
    }
    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    grazie non conoscevo il complete.
    codice:
    imageT.complete
    2 domande:
    non e' la stessa cosa mettere in loop con un

    codice:
    while (!imageT.complete) ;
    ??

    nn e' un po' pericolosa come soluzione? metti che l'immagine per un qualsiasi motivo non viene caricata, il browser andrebbe in loop giusto?

    sono solo supposizioni, cmq credo che il tuo prezioso consiglio mi portera' sulla retta via :metallica
    tnx !


  4. #4
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Se fai un loop di quel tipo impegni risorse del computer... e se realmente l'immagine non viene caricata sei certo di bloccarlo

    Utilizzando setTimeout() nella pausa il computer fa altro...

    Per gestire un numero limitato di tentativi puoi fare questa modifica:

    codice:
    var imageT = new Image();
    var volte;
    function showImg(imgId){ 
         imageT.src = "img/floppy/"+imgId+"_big.gif";
         setTimeout("misura()",100)  
         volte = 10;
    }
    function misura() {
         if (imageT.complete) { // e' stata caricata?
              wintype = "width=" + parseInt(imageT.width +20) + 
              ",height=" + parseInt(imageT.height +25) + 
              ",scrollbars=0,resizable=0,statusbar=no" +
              ",toolbar=no,top=140,left=140";      
              win1 = window.open("img/floppy/"+imgId+"_big.gif","2",wintype);
              win1.focus();
         } else {
              if (volte>0) {
                   volte--;
                   setTimeout("misura()",100);  
              } else {
                   alert("Errore caricamento immagine");
         }
    }
    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    5
    Ciao a tutti

    Sto tentando di adattare lo script proposto da br1 per ovviare al problema dei blocchi delle popup.
    Con quello script la funzione richiama se stessa con il setTimeout e questa viene interpretata come una popup non richiesta dai sistemi di blocco (io uso la google toolbar e me la blocca)

    il codice che ho fatto e' questo, pero' sono agli inizi col javascript e non sono sicuro della sua totale correttezza, inoltre non so come impostare una pausa

    codice:
    var counter, photourl, mod, flag;
    var photo = new Image();
    
    function defineVars(a,b)
    {
      counter=10;
      flag=true;
      photourl=a;
      mod=b;
      photo.src=(photourl);
    }
    
    function createNewWindow() 
    {
      while(flag)
      {
        if (photo.complete)
        {
          newWindow = window.open("","","width="
                      +photo.width+",height="
                      +photo.height+",toolbar=no,location=no,
                       directories=no,status=no,menubar=no,
                       scrollbars=no,resizable=no");
          if (newWindow != null) 
          {
            newWindow.document.write("<HTML><HEAD><TITLE>"
                      +mod+"</TITLE></HEAD>
                      <BODY leftmargin=\"0\" topmargin=\"0\" bgcolor=\"#000084\">
                      <a href=\"javascript:window.close();\">
                      <img src=\""+photourl+"\" alt=\"Close\" border=\"0\"></a>
                      </BODY></HTML>");
            flag=false;
          }
        }
        else 
        {
          if (counter>0) 
          {
            counter--;
    	//QUA DOVREBBE ESSERCI UNA PAUSA !!	
          } 
    	  else 
          {
            alert("Image load error");
    	flag=false;
          }
        }
      }
    }
    che viene richiamato da una pagina php con

    Codice PHP:
    <? 
    echo "<a href=\"#\" onClick=\"javascript:defineVars('foto1.jpg','$nome_foto_01');createNewWindow();\">...</a> ";
    ?>
    Avete consigli da darmi, magari sulla compatibilita' tra browser?
    Come posso farlo attendere un po' dentro al while? (di funzioni che generano una pausa ho trovato solo setTimeout e setInterval ,ma entrambe vogliono una funzione da richiamare come parametro... io invece voglio solo generare una pausa dentro al while)
    Quanto si dovrebbe farlo attendere (calcolando che le immagini piu' grosse sono sui 100k e dovrebbero funzionare anche per i modem 56k)?

    grazie anticipatamente per le risposte
    :JaM:

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    5
    riuppo il thread perche' mi sa che vi e' sfuggito il fatto che c'e' dentro una nuova domanda :P
    (se cosi' non fosse, pazienza.... )
    :JaM:

  7. #7
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Rileggi la discussione... la soluzione adottata dipende dal fatto che non si possono generare delle pause in javascript all'interno di un ciclo nelle quali il computer "fa altro".

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    5
    Grazie ma... nemmeno pause che tengano occupato il computer? (tanto dopo un numero finito di cicli si ferma)
    Mi viene in mente solo di aumentare il counter ma e' un po' una soluzione risibile

    Col sistema proposto prima le finestre con le foto vengono bloccate da eventuali sistemi anti-popup, anche se in realta' sono richieste dall'utente...
    :JaM:

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.