Newsgroup: it.comp.lang.javascript
Titolo: Traduzione script per Opera e Netscape6

Ciao a tutti,
sto cercando di rendere crossbrowser
uno script scritto solo per explorer,
finora con scarso risultato.
Finora sono riuscito a farlo leggere a Netscape4.x,
usando i layer al posto dei div,
ma con i browser recenti non so che fare.
Ecco qua il problema:
Face='ENOTECA';
speed=0.6;
Face=Face.split('');
n=Face.length;
{
for (i=0; i < n; i++)
document.write
('<div id="pippo" style="position:absolute;top:0px;left:0;height:10;width:10;text-align:center">'+Face[i]+'</'+'div>');}
}
function Pluto(){
for (i=0; i < n; i++){
 if (document.layers) {var F=document.layers['paperino'+i]} // questo funziona - e con Netscape4 siamo a posto
 else if (!window.opera&&document.all) {var F=pippo[i].style} // questo funziona - e con Explorer siamo a posto
 else {??????????????????????????????????????????} // qua non so cosa scrivere...
 }
}
Qualcuno sa cosa scrivere al posto dei punti interrogativi?
Grazie!
MaRoK

 ha scritto nel messaggio
news:ZFx_8.11567$GV2.3...@twister2.libero.it...

agli ID di Netscape>4.7 accedi con document.getElementById("nome_id")
Saluti

 Saluti
avevo già provato varie ipotesi tra cui:
var F=document.getElementById(pippo[i]).style
var F=document.getElementById(pippo(i)).style
ma finora non ho avuto risultati positivi...
MaRoK

 else if ((!window.opera&&document.all) || document.getElementById) {var F=pippo[i].style}
succede una cosa molto strana:
su Opera e SOLO in modalità IE
funziona per tre elementi dell'array,
ovvero per le lettere C, T ed E che si animano,
mentre le altre rimangono ferme su (0,0)
Lo script, ti ricordo, era:
Face='ENOTECA'; // questo è l'array
speed=0.6;
Face=Face.split('');
n=Face.length;
{
for (i=0; i < n; i++)
document.write
('<div id="pippo" style="position:absolute;top:0px;left:0;height:10;width:10;text-align:center">'+Face[i]+'</'+'div>');}
}
for (i=0; i < n; i++){
 if (document.layers) {var F=document.layers['pippo'+i]}
 else {var F=pippo[i].style}
 F.top=y[i] + ClockHeight*Math.sin(-1.0471 + i*Split*Math.PI/180)+scrll;
 F.left=x[i] + ClockWidth*Math.cos(-1.0471 + i*Split*Math.PI/180);
 }
E' come se saltasse degli "i", ma non capisco con quale criterio...
Che abbia difficoltà perché non ho definito Face come Array?
Magari IE e Netscape4 sono più tolleranti...
Se vuoi vedere anche il resto dello script te lo metto on line!
Grazie!
MaRoK

 Se ti fa piacere certo che sì.
OK, l'indirizzo è questo:
www.marok.org/Prove/datradurre.htm
(in realtà è una versione semplificata,
altrimenti c'è da impazzire! :o))
Come dicevo, gira su IE e NS4.x
ma non riesco a "tradurlo" per i nuovi browsers
(Opera, Netscape6 ecc...)
Credo che tutto dipenda dall'accesso
agli elementi degli array,
ma confido nei vostri lumi! :o)
Grazie!
MaRoK

 
www.marok.org/Prove/datradurre.html
for (i=0; i < n; i++)
document.write('<div id="Pippo'+i+'"
style="position:absolute;top:0px;left:0;height:10;width:10;text-align:center
"><font Frase="Arial" size=2
color="lime"><b>'+Frase[i]+'</b></font></div>');
}
 if (document.layers) {var F=document.layers['Paperino'+i]}
 else if (document.all&&!window.opera) {var F=document.all["Pippo"+i].style}
 else {var F=document.getElementById('Pippo'+i).style}
Cosi' funziona.
--
Ciao
  [web]   
www.gfcarlotti.it
   [mail]   
fra...@gfcarlotti.it
    [pgp]  
www.gfcarlotti.it/pgp/franco.asc


bruciato di un cinin sul tempo (o forse mi era sfuggito perche il mio
nws reader non incolonna correttamente gli R: al posto dei Re:)
salvo questo di quello che avevo scritto
L' id degli elementi deve essere unico
E' IE che supplisce [l' ho scoperto ora, non lo sapevo] alla multipla
assegnazione dello stesso id creando un array  al quale consente,
bonta' sua, di accedere
ma non mi sembra sia un comportamento corretto o richiesto dallo
standard in faticosa creazione
 anche se conforme a una tradizione di 'assistenza' svolto dal browser
MS _ non so fino a che punto benevola_

 MS _ non so fino a che punto benevola_
Lo script "semplificato" che avevo messo on line gira alla perfezione,
ma aggiungendo tutte le altre variabili è PARECCHIO più lento di prima...
su Explorer gira leggermente a scatti,
su Opera e Netscape6 ci manca poco che pianti il browser...
Eppure la mia CPU è abbastanza veloce.
Da cosa può dipendere?
Lo script è sempre allo stesso posto:
www.marok.org/Prove/datradurre.htm
potrei alzare il timeout per impegnare di meno la cpu,
ma prima volevo capire se c'era modo di ottimizzare lo script...
Qualche idea?
MaRoK

 nws reader non incolonna correttamente gli R: al posto dei Re:)
Infinitamente colpa mia,
dico sempre di aggiornare OE, o installare
qualcosaltro ....
poi mi dimentico, e devo farlo a mano
(quando mi ricordo).


(quando mi ricordo).
non voleva essere un richiamo subliminale ;-)
ciao

Qualche idea?
ho provato a spostare il richiamo temporizzato da dentro la stessa
Delay alla
function ClockAndAssign(){
[...]
currStep-=step;
setTimeout('Delay()',20)//ultima istruzione della funzione
}
questo perche' mi pare nulla ci assicuri che i tempi di elaborazione e
soprattutto di  resa di clockandassign sia compatibile con timeout da
essa totalmente slegato
potrei sbagliarmi ma ho come l'' impressione che questo possa essere
un motivo di sovraccarico
ho fatto poi una prova mozilla 1.1 IE5.5
***************************************************
non  farla con file di lavoro [o non di lavoro] aperti e non salvati
se dici di rischiare il blocco da reset (foriero di maledizioni  per
me scrivente) 
*****************************************************
nella pagina di test creo una variabile globale 
'ritardo' che pongo =1000/* un secondo, tanto per essere sicuro di
notare le modifiche progressive che operero'*/
modifico il timeout in
setTimeout('Delay()',ritardo)
faccio aprire una finestra di supporto
window.open('settaggio1.htm','modificaritardo')/*mettici i parametri o
resize manuale*/
con una istruzione fuori funzione in corso  caricamento.
al suo interno
<HTML>
<HEAD>
<TITLE> prova settaggio movimento ->settaggio1.htm</TITLE>
</HEAD>
<BODY>
<FORM >
<SELECT id="b" name='b' SIZE="1" onchange=nome()>
	<script language="javascript">
for (i=1;i<1000;i++)
{document.write('<OP'+'TION VALUE='+i+'2>'+i)}
</script>
</SELECT>
</FORM>
<script language="javascript">
function nome(){
mr=document.forms[0].b[document.forms[0].b.selectedIndex].value
opener.ritardo=mr/1000/*provare formula a piacere questo e' breve
veramente*/
}
</script>
</BODY>
</HTML>
in questo modo dalla finestra popup una volta selezionato un valore,
con i tasti freccia posso far variare il valore di ritardo mantenendo
il mouse sulla finestra test (anche se priva del focus)
I risultati migliori a mio avviso sono intorno a 170 (del select)
e' un risultato empirico che puo' variare a seconda del sistema sul
quale e' attivo il browser
e soprattutto non c'è proporzionalitaì' diretta tra ritardo e
velocita' ma quasi un andamento sinusoidale con periodo [e motivo] che
non colgo.
se sei arrivato fino qui e fatto una prova batti un colpo 
ciao

 se sei arrivato fino qui e fatto una prova batti un colpo
TOCTOC ;o)
Accidenti, sei un grande, ti devo assumere come beta-tester ufficiale! ;o)
Quello che però mi chiedo è
1) perché lo script "riadattato" è più lento rispetto al vecchio?
le *uniche* differenze per ie sono:
document.write('<div id="ieDate" style="...">     e poi {var F=ieFace[i].style} // vecchio
document.write('<div id="ieDate'+i+'"style="..."> e poi {var F=document.all["ieFace"+i].style} // nuovo
2) perché su Netscape6, Mozilla e Opera va ad una lentezza mostruosa rispetto ad ie e ns4?
Netscape6 e Mozilla li trovo leggermente più lenti anche sugli altri mouse-trailers che ho tradotto,
ma mai a questo livello, e Opera prima d'ora non mi ha mai dato problemi di questo tipo...
è strano...
Cmq il tuo sistema è molto utile,
perché almeno ti permette di prevenire un eventuale crash del browser
(lasci di default un refresh lento,
e poi l'utente lo può alzare gradualmente, finché il suo sistema lo consente...)
Grazie,
alla prossima!
MaRoK