Lo script che presentiamo rende una normale pop up "elastica". Una volta aperta, la finestra si ridimensionerà secondo le misure impostate con un movimento dinamico e non sarà possibile variarne la grandezza. Lo script è compatibile con Explorer 5.x e con Netscape 6.x.
Nell'esempio il codice javascript è stato messo direttamente tra gli <head> del documento ma, data la lunghezza, è consigliabile utilizzare un file .js esterno.
L'esempio si compone di 2 file:
- esempio.htm
- popup.htm
Per una più semplice comprensione del presente script fai continuamente riferimento ai file sopracitati, verificando le procedure e i dati espressi. Solo in questo modo, con un continuo confronto, comprenderai le peculiarità di questo Javascript.
Inseriamo questo codice tra i tag <head> della popup:
<script language="javascript" type="text/javascript">
<!--
function resizeWin(maxX,maxY,speed,delay,win){
this.obj = "resizeWin" + (resizeWin.count++);
eval(this.obj + "=this");
if (!win) this.win = self; else this.win = eval(win);
if (!maxX) this.maxX = 300; else this.maxX = maxX;
if (!maxY) this.maxY = 400; else this.maxY = maxY;
if (!speed) this.speed = 1/7; else this.speed = 1/speed;
if (!delay) this.delay = 30; else this.delay = delay;
this.doResize = (document.all || document.getElementById);
this.stayCentered = false;
this.initWin = function(){
if (this.doResize){
this.resizeMe();
}
else {
this.win.resizeTo(this.maxX + 10, this.maxY - 20);
}
}
this.resizeMe = function(){
this.win.focus();
this.updateMe();
}
this.resizeTo = function(x,y){
this.maxX = x;
this.maxY = y;
this.resizeMe();
}
this.stayCentered = function(){
this.stayCentered = true;
}
this.updateMe = function(){
this.resizing = true;
var x = Math.ceil((this.maxX - this.getX()) * this.speed);
var y = Math.ceil((this.maxY - this.getY()) * this.speed);
if (x == 0 && this.getX() != this.maxX) {
if (this.getX()> this.maxX) x = -1;
else x = 1;
}
if (y == 0 && this.getY() != this.maxY){
if (this.getY()> this.maxY) y = -1;
else y = 1;
}
if (x == 0 && y == 0) {
this.resizing = false;
}
else {
this.win.top.resizeBy(parseInt(x),parseInt(y));
if (this.stayCentered == true) this.win.moveTo((screen.width -
this.getX()) / 2,(screen.height - this.getY()) / 2);
setTimeout(this.obj + '.updateMe()',this.delay)
}
}
this.write = function(text){
if (document.all && this.win.document.all["coords"])
this.win.document.all["coords"].innerHTML = text;
else if (document.getElementById &&
this.win.document.getElementById("coords")) this.win.document.getElementById("coords").innerHTML = text;
}
this.getX = function(){
if (document.all) return (this.win.top.document.body.clientwidth + 10)
else if (document.getElementById)
return this.win.top.outerwidth;
else return this.win.top.outerwidth - 12;
}
this.getY = function(){
if (document.all) return (this.win.top.document.body.clientheight + 29)
else if (document.getElementById)
return this.win.top.outerheight;
else return this.win.top.outerheight - 31;
}
this.onResize = function(){
if (this.doResize){
if (!this.resizing) this.resizeMe();
}
}
return this;
}
resizeWin.count = 0;
//-->
</script>
Questo codice non richiede modifiche; tutti i parametri, infatti, possono essere impostati in seguito.
Sempre tra i tag <head> della stessa pagina inseriamo il prossimo codice:
<script type="text/javascript" language="javascript">
<!--
booyah = new resizeWin(300,150,7,30);
booyah.stayCentered();
//-->
</script>
I valori numerici tra le parentesi tonde sono i parametri che ci interessa personalizzare
300
indica la larghezza della pop up
150
indica l'altezza della pop up
7
è il grado di "elasticità" della finestra. con valore 1, ad esempio, la pop up sarà meno "elastica"
30
indica la velocità di ridimensionamento. a valore più alto corrisponde una minore velocità di movimento
Nel caso non volessimo aprire la finestra in posizione centrale basterà decommentare questa riga:
booyah.stayCentered();
Ricordo che, per decommentare una stringa, basta aggiungere due slash ad inizio riga come in questo caso:
//booyah.stayCentered();
A questo punto dobbiamo inserire due eventi nel tag <body> della finestra:
onload="booyah.initWin()" onresize="booyah.onResize()"
Il nostro <body>, quindi, sarà strutturato in questa maniera:
<body onload="booyah.initWin()" onresize="booyah.onResize()">
Non rimane altro che preparare il collegamento che lancerà la pop up dalla finestra madre:
<a href="javascript:;" onClick="window.open('popup.htm','','resizable,scrollbars')">Clicca</a>
popup.htm
è il nome della finestra da aprire
resizable,scrollbars
sono le caratteristiche attribuite alla finestra. nel caso, ad esempio, non volessimo le barre di scorrimento basterà levare la parola "scrollbars"; oppure basterà aggiungere, dopo la virgola, la parola "location" per avere la barra degli indirizzi.