nella mia pagina index ho inserito, come da oggetto, delle animazioni java, due per la precisione.
la pagina si comporta correttamente in tutti i browser, almeno al primo caricamento, compare il logo flash, quando questo finisce richiama la funzione che fà partire il preload, che a sua volta esegue prima il fade-in della barra di preload, a caricamento effettuato c'è il fade-out di quest'ultima e contemporaneamente il fade-in del div contenente i link per accedere al sito in italiano o inglese (con background animato della bandiera "proiettata" sotto che si illumina al passaggio del mouse sui[*] che contiengono i link testuali)
come detto, tutto questo succede al primo caricamento, ma in explorer 6 funziona solo la prima volta, se si prova a ritornare alla pagina o cliccando su un link ad essa relativa, o facendo il refresh, o richiamando l'indirizzo dalla barra degli indirizzi del browser ogni volta si comporta in modo diverso :
-sparisce il background della pagina
-non compare la barra ma compare la percentuale
-compaiono i link con background ma senza animazione
-c'è il background solo al link in italiano ma senza animazione
-compare il logo flash e fade in dei link ma senza alcun background(della pagina e dei[*])
questo grosso modo è il problema più grave, in explorer 7 invece se si refresha la pagina l'animazione dello sfondo dei link non parte più
in firefox si comporta in modo strano se si torna alla pagina usando la funzione history-back del browser, i div dei link sono già visibili e la barra del preload tenta di avanzare oltre il 100% (ma ho risolto parzialmente inserendo un controllo prima dell'inizio del preload, così se trova i[*] visibili la barra non avanza perchè il preload è già completo)
vi posto di seguito i codici rispettivi, se riuscite a capire cosa c'è che non và mi fate un favore enorme perchè non sò più dove sbattere la testa...![]()
__________________________________________________ ___________________________
questo è il codice del preload
codice:function preFIRE() {if(document.getElementById('ling').style.visibility != "visible") setTimeout("fade('bar')",1300); setTimeout("fade('bg')",1300); setTimeout("fade('loadER')",1300); setTimeout("fade('percent')",1300); setTimeout("startLoading()",1750); } var pics = new Array(<? ?>); /////URL DOPO LA FINE DEL DOWNLOAD var url = "it/index.html"; /////MESSAGGIO POPUP DI CONFERMA NEL BROWSER var doConfirm = false; /////SKIP PRELOAD var canSkip = false; var imgObjs = new Array(pics.length); var loaded = 0; var total = pics.length; var cPercent = 0; var barLayer = null; var percentLayer = null; var statLayer = null; var doneMsgLayer = null; function getLayer(layerID) { if (document.getElementById) return document.getElementById(layerID); else if (document.all) return document.all[layerID]; else return null; } function startLoading() { if (document.getElementById || document.all) { barLayer = getLayer("bar"); percentLayer = getLayer("percent"); statLayer = getLayer("stat"); doneMsgLayer = getLayer("doneMsg"); loadERLayer = getLayer("loadER"); loadINGLayer = getLayer("loadING"); loadEDmLayer = getLayer("loadEDm"); loadEDpLayer = getLayer("loadEDp"); lingLayer = getLayer("ling"); barLayer = getLayer("bar"); bgLayer = getLayer("bg"); if (canSkip) doneMsgLayer.innerHTML = "<span></span><a href=\"javascript:done()\"><font face=\"Arial\" color=\"#CCCCCC\" size=\"1\">Skip Pre-Load</font></a>"; for (i=0; i<pics.length; i++) { imgObjs[i] = new Image(); imgObjs[i].onload = imgLoaded; imgObjs[i].onerror = imgFailed; imgObjs[i].src = pics[i]; } } else { window.location.replace(url); } } function imgLoaded() { loaded++; if (loaded>pics.length) return updateBar(); } function updateBar() { var percent = Math.round(loaded/total * 100); if (cPercent != percent) { cPercent = percent; barLayer.style.width = (cPercent*3) +"px"; percentLayer.innerHTML = "<font font-family: Arial, Helvetica, sans-serif;color: #FFFFFF;font-size: 9px;>" +cPercent+ "%</font>"; statLayer.innerHTML = "<font font-family: Arial, Helvetica, sans-serif;color: #FFFFFF;font-size: 9px;>" +loaded+ "/" +total+ "</font>"; } if (loaded == total) { doneMsgLayer.innerHTML = ""; ////per entrare nel sito <a href=\"javascript:done()\"><font face=\"Arial\" color=\"#FFFFFF\" size=\"1\"></font></a> ////loadERLayer.style.visibility = 'hidden'; loadINGLayer.style.visibility = 'visible'; ///loadEDmLayer.style.visibility = 'visible'; ///loadEDpLayer.style.visibility = 'visible'; lingLayer.style.visibility = 'visible'; fade('ling'); fade('bar'); fade('bg'); fade('loadER'); fade('percent'); ///////////////REINDIRIZZAMENTO AUTOMATICO///////////setTimeout("done()",1500); if (doConfirm && confirm("Download terminato, andare all'Home page?")) done(); } } function done() { parent.window.location.replace(url); } function imgFailed() { alert("The following image failed to load, probably a broken link:\n" +this.src+ "\nPlease contact the webmaster of the site about this. The program will skip this file now."); loaded++; updateBar(); }
ho tentato di associare l'animazione del preload (i 4 timeout iniziali) a un div che li contenesse tutti ma misteriosamente non funziona, parte solo in quel modo...
questo è il codice che fà comparire/scomparire gli elementi di cui viene specificato il div(fade),
ciascun elemento ha le seguenti proprietà CSS :
{filter:Alpha(opacity=00);-moz-opacity:0.0;opacity:0.0}
lo script le incrementa gradualmente facendo così apparire gli elementi dal nulla...
codice:var TimeToFade = 400.0; function fade(eid){ var element = document.getElementById(eid); if(element == null) return; if(element.FadeState == null){ element.FadeState = -2; } if(element.FadeState == 1 || element.FadeState == -1){ element.FadeState = element.FadeState == 1 ? -1 : 1; element.FadeTimeLeft = TimeToFade - element.FadeTimeLeft; }else{ element.FadeState = element.FadeState == 2 ? -1 : 1; element.FadeTimeLeft = TimeToFade; setTimeout("animateFade(" + new Date().getTime() + ",'" + eid + "')", 33); } } function animateFade(lastTick, eid){ var curTick = new Date().getTime(); var elapsedTicks = curTick - lastTick; var element = document.getElementById(eid); if(element.FadeTimeLeft <= elapsedTicks){ element.style.opacity = element.FadeState == 1 ? '1' : '0'; element.style.filter = 'alpha(opacity = ' + (element.FadeState == 1 ? '80' : '0') + ')'; element.FadeState = element.FadeState == 1 ? 2 : -2; return; } element.FadeTimeLeft -= elapsedTicks; var newOpVal = element.FadeTimeLeft/TimeToFade; if(element.FadeState == 1) newOpVal = 1 - newOpVal; element.style.opacity = newOpVal; element.style.filter = 'alpha(opacity = ' + (newOpVal*80) + ')'; setTimeout("animateFade(" + curTick + ",'" + eid + "')", 33); }; function toggleDisplay(eid) { var element = document.getElementById(eid); if(element == null) return; if(document.getElementById(eid).style.display == 'none' ) { document.getElementById(eid).style.display = 'block'; }else{ setTimeout("setNone('"+eid+"')",TimeToFade); } } function setNone(eid) { document.getElementById(eid).style.display = 'none'; }
il seguente invece è il codice per animare il background (ormai lo conoscete benissimo...)
codice:if (document.getElementById && document.getElementsByTagName) { if (window.addEventListener) window.addEventListener('load', initAnims, false); else if (window.attachEvent) window.attachEvent('onload', initAnims); } function initAnims() { classChange(document.getElementById('ling'),'scriptactive','noscript') var animElements = document.getElementById('ling').getElementsByTagName('li'); for(var i=0; i<animElements.length; i++) { animElements[i].bgAnim = { iPos:[0,0], pUnit:['%','px'], cFrame:0, mFrame: 14, dPos:[0,-80], mSec:15 } animElements[i].onmouseover = backPosAnimF; animElements[i].onmouseout = backPosAnimR; } function backPosAnimF() { doBackPosAnim(this,this.bgAnim,this.bgAnim.cFrame, this.bgAnim.mFrame); } function backPosAnimR() { doBackPosAnim(this,this.bgAnim,this.bgAnim.cFrame, 0); } } function doBackPosAnim(elem,vrH,startFrm,endFrm) { if (vrH.intID) window.clearInterval(vrH.intID); var actStep = 0, steps = Math.abs(endFrm - startFrm)+1; vrH.intID = window.setInterval( function() { vrH.cFrame = easeInOut(startFrm,endFrm,steps,actStep,1); vrH.cPos = [ vrH.iPos[0]+vrH.cFrame*vrH.dPos[0], vrH.iPos[1]+vrH.cFrame*vrH.dPos[1] ]; elem.style.backgroundPosition = vrH.cPos[0]+vrH.pUnit[0]+' '+vrH.cPos[1]+vrH.pUnit[1]; actStep++; if (actStep > steps) window.clearInterval(vrH.intID); } ,vrH.mSec) } function doBackPosChange(elem,vrH,startPos,endPos,steps,intervals,powr) { if (vrH.intID) window.clearInterval(vrH.intID); var actStep = 0; vrH.intID = window.setInterval( function() { vrH.cPos = [ easeInOut(startPos[0],endPos[0],steps,actStep,powr), easeInOut(startPos[1],endPos[1],steps,actStep,powr) ]; elem.style.backgroundPosition = vrH.cPos[0]+vrH.pUnit[0]+' '+vrH.cPos[1]+vrH.pUnit[1]; actStep++; if (actStep > steps) window.clearInterval(vrH.intID); } ,intervals) } function easeInOut(minValue,maxValue,totalSteps,actualStep,powr) { totalSteps = Math.max(totalSteps,1) var delta = maxValue - minValue; var stepp = minValue+(Math.pow(((1 / totalSteps)*actualStep),powr)*delta); return Math.ceil(stepp) } function classChange(elem,addClass,remClass) { if (!elem.className) elem.className = ''; var clsnm = elem.className; if (addClass && !clsnm.match(RegExp("\\b"+addClass+"\\b"))) clsnm = clsnm.replace(/(\S$)/,'$1 ')+addClass; if (remClass) clsnm = clsnm.replace(RegExp("(\\s*\\b"+remClass+"\\b(\\s*))*","g"),'$2'); elem.className=clsnm; } function showError(str) { if (window.opera) opera.postError('|'+str+'|'); else alert('|'+str+'|'); }

)
Rispondi quotando
