Newsgroup: it.comp.lang.javascript
Titolo: Ridimensionamento Layer con NS

Forse ho scoperto l'acqua calda o forse sto prendendo un grosso abbaglio, ma
sto concludendo che NS4.x non ridimensiona i layer.
Quando si crea un layer si possono specificare due tipi di dimensioni: le
dimensioni del layer, cioè le dimensioni che occuperanno gli elementi
contenuti, e le dimensioni dell'area visibile. Tutti i metodi dei layer
disponibili, come resizeTo() o resizeBy(), o le proprietà come clip.width e
clip.height, ridefiniscono le dimensioni dell'area visibile ma non quella
del layer. In nessuna parte dei manuali ho trovato qualcosa che agisca sulle
dimensioni del layer.
Per fortuna, se il layer è piccolo del suo contenuto, questo si ridimensiona
automaticamente alle dimensioni del suo contenuto. Per cui fin'ora sto
usando questo trucco: definisco le dimensioni del layer abbastanza piccole e
poi vi inserisco una tabella di dimensioni appropriate. Più o meno così:
    function resize(w, h) {
        var layObj = document.layers["LayerID"];
        var s = '<table width="' + w + '" height="' + h + '" border="3">';
        s += '<tr><td height="100%"> width = ' + w + '" height="' + h + '
</td></tr></table>';
        layObj.document.open();
        layObj.document.write(s);
        layObj.document.close();
    }
che richiamo con:
    resize(300, 200);
Insomma la domanda è questa: sto complicando le cose facili? Vi sono altri
modi più semplici ?
Maurizio.

 clip.height
Io ho fatto questa prova:
<!--  -------------------------------------- -->
<script language="JavaScript">
function changeclip(field) {
 var obj = document.layers["myLayer"];
 obj.clip[
field.name
] = field.value;
}
</script>
<table width="100" border="0" cellspacing="0" cellpadding="0"
bgcolor="#EEEEFF">
  <form name="myForm" >
    <tr>
      <td class="testo">clip.width</td>
      <td>
        <input type="text" name="width" size="6"
onchange="changeclip(this)">
      </td>
    </tr>
    <tr>
      <td height="29" class="testo">clip.height</td>
      <td height="29">
        <input type="text" name="height" size="6"
onchange="changeclip(this)">
      </td>
    </tr>
    <tr>
      <td class="testo">clip.top</td>
      <td>
        <input type="text" name="top" size="6" onchange="changeclip(this)">
      </td>
    </tr>
    <tr>
      <td class="testo">clip.left</td>
      <td>
        <input type="text" name="left" size="6" onchange="changeclip(this)">
      </td>
    </tr>
    <tr>
      <td class="testo">clip.right</td>
      <td>
        <input type="text" name="right" size="6"
onchange="changeclip(this)">
      </td>
    </tr>
    <tr>
      <td class="testo">clip.bottom</td>
      <td>
        <input type="text" name="bottom" size="6"
onchange="changeclip(this)">
      </td>
    </tr>
  </form>
</table>
<layer id="myLayer" left="200" top="10" width="200" height="115" z-index="1"
bgcolor="#009900">
<table width="100%" height="100%" border="1" cellspacing="0" cellpadding="0"
bgcolor="#FEF4D6">
  <tr>
    <td height="100%" class="testo">&nbsp;width = 200 px<br>
      <br>&nbsp;height = 115 px</td>
  </tr>
</table>
</layer>
<!--  -------------------------------------- -->
Ho definito, cioč, un layer di dimensioni fisse (220 x 115) e vi ho inserito
una tabella che dovrebbe occupare tutto lo spazio disponibile (100%). Lo
sfondo della tabella ha un colore diverso dallo sfondo del layer.
Ridimensionando il layer, la tabella dovrebbe ridimensionarsi a sua volta e
nascondere lo sfondo del layer. Ma questo non succede e viene fuori lo
sfondo verde del layer.
Gli altri browser si comportano in maniera diversa.
Fammi capire se sto sbagliando qualcosa.
Maurizio.

ciao a tutti!</div>
<br><br><br>
<p><a href='javascript:verM()'>meno</a></p>
<p><a href='javascript:verP()'>piu</a></p>
</body>
</html>
clip si riferisce al layer.
Ns4x, che io sappia, ridimensiona il layer, ma non aggiorna il contenuto,
quindi, se  come nell' esempio, vuoi che si veda tutta la scritta,
glielo devi ristampare con "document.write", come ho fatto nel -layer
['pippo1']-.
Facci sapere.
--
Ciao
  [web]   
www.gfcarlotti.it
   [mail]   
fra...@gfcarlotti.it
    [pgp]  
www.gfcarlotti.it/pgp/franco.asc

 ['pippo1']-.
Il tuo esempio è molto convincente e la tua ipotesi del mancato
aggiornamento sembrerebbe avvalorata anche dal tutorial di NS, quando dice:
| Note that this does not relayout any HTML contained
| in the layer. Instead, the layer contents may be clipped
| by the new boundaries of the layer.
Ma NS in proposito risulta sempre molto vaga evitando con cura le parole
width e height e si limita a dire che:
| clipping region can extend beyond the area of the layer
| that contains content.
Però qualcosa non mi ha convinto nel tuo esempio: tu non assegni dimensioni
iniziali al layer ed è abbastanza comprensibile che queste si adattino al
loro contenuto. Prova invece ad assegnare a pippo1 le dimensioni iniziali
(50, 100) e vedrai che anche aggiornando il contenuto, la scritta rimane
sempre su due righe.
I vari clip.xxxx controllano solo la parte visibile del layer. Visti i
pastrocchi che NS ha fatto con i layer, non mi meraviglia che visualizzi con
lo stesso colore l'area visibile anche se questa è più grande del layer
stesso.
In altre parti del tutorial NS parla di "wrapping width" come una cosa
diversa dalla "clip width" e fa anche un esempio di ridimensionamento usando
la funziona load(), quindi con l'aggiornamento del contenuto. Però la
funzione load è una cosa diversa da document.write perché accetta anche,
come
secondo parametro, la larghezza del layer.
Per concludere, mi sembra che il problema non si risolva con un semplice
aggiornamento del contenuto.
Maurizio.

 Maurizio.
In questi termini, credo sia cosi'.


Se può interessare, ecco la conferma di ciò che si era dedotto dalle prove
effettuate:
| The only way to change the wrapping width of a layer is to reload
| the contents of the layer using the load() function. This function
| takes two arguments: the file to use as the content of the layer,
| and the new wrapping width of the layer.
Questo è tratto dal tuttorial NS "Dynamic HTML in Netscape Communicator "
(dynhtml.zip).
Maurizio.