En primer lugar, gracias por el tiempo.
Vamos a ello.
Estoy creando una web que tiene una imagen de fondo que cambia cada x tiempo con un barrido. Esta función de JS me funciona bien en Opera, Safari, IE...pero en Firefox no hay manera.
Con la consola detecté un error de getelementbytagname que ya está solucionado. Ahora el FF no me da error, pero sigue sin verse nada de nada.
Les dejo los códigos aquí abajo por si pueden echarme un cable.
El JS.
Código:
El HTML// IXF1.0 :: Image cross-fade // ***************************************************** // DOM scripting by brothercake -- http://www.brothercake.com/ //****************************************************** //global object var ixw = { 'clock' : null, 'count' : 1 } var tiempo; var imagenes = new Array("imagenes/imagen1.jpg","imagenes/imagen2.jpg","imagenes/imagen3.jpg", "imagenes/imagen4.jpg","imagenes/imagen5.jpg","imagenes/imagen6.jpg", "imagenes/imagen7.jpg","imagenes/imagen8.jpg","imagenes/imagen9.jpg","imagenes/imagen10.jpg"); /******************************************************* /***************************************************************************** List the images that need to be cached *****************************************************************************/ ixw.imgs = [ 'imagenes/imagen1.jpg', 'imagenes/imagen2.jpg', 'imagenes/imagen3.jpg', 'imagenes/imagen4.jpg', 'imagenes/imagen5.jpg', 'imagenes/imagen6.jpg', 'imagenes/imagen7.jpg', 'imagenes/imagen8.jpg', 'imagenes/imagen9.jpg', 'imagenes/imagen10.jpg', ]; /***************************************************************************** *****************************************************************************/ //cache the images ixw.imgsLen = ixw.imgs.length; ixw.cache = []; for(var i=0; i<ixw.imgsLen; i++) { ixw.cache[i] = new Image; ixw.cache[i].src = ixw.imgs[i]; } function aleatorio(inferior,superior){ numPosibilidades = superior - inferior aleat = Math.random() * numPosibilidades aleat = Math.floor(aleat) return parseInt(inferior) + aleat } //crosswipe setup function function crosswipe() { //if the timer is not already going if(ixw.clock == null) { //copy the image object ixw.obj = arguments[0]; //get its dimensions ixw.size = { 'w' : ixw.obj.width, 'h' : ixw.obj.height }; //copy the image src argument var n=aleatorio(0,9); //alert (n); ixw.src = imagenes[n]; //change the image alt text if defined if(typeof arguments[3] != 'undefined' && arguments[3] != '') { ixw.obj.alt = arguments[3]; } //if dynamic element creation is supported if(typeof document.createElementNS != 'undefined' || typeof document.createElement != 'undefined') { //create a new image object and append it to body //detecting support for namespaced element creation, in case we're in the XML DOM ixw.newimg = document.getElementsByTagName('span')[0].appendChild((typeof document.createElementNS != 'undefined') ? document.createElementNS('http://www.w3.org/1999/xhtml', 'img') : document.createElement('img')); //set positioning classname ixw.newimg.className = 'idupe'; //set src to new image src ixw.newimg.src = ixw.src //move it to superimpose original image ixw.newimg.style.left = ixw.getRealPosition(ixw.obj, 'x') + 'px'; ixw.newimg.style.top = ixw.getRealPosition(ixw.obj, 'y') + 'px'; //set it to be completely hidden with clip ixw.newimg.style.clip = 'rect(0, 0, 0, 0)'; //show the image ixw.newimg.style.visibility = 'visible'; //copy and convert fade duration argument ixw.length = parseInt(arguments[1], 10) * 1000; //create fade resolution argument as 20 steps per transition ixw.resolution = parseInt(arguments[1], 10) * 20; //copy slide direction argument ixw.dir = arguments[2]; //start the timer ixw.clock = setInterval('ixw.crosswipe()', ixw.length/ixw.resolution); } //otherwise if dynamic element creation is not supported else { //just do the image swap ixw.obj.src = ixw.src; } } }; //crosswipe timer function ixw.crosswipe = function() { //decrease the counter on a linear scale ixw.count -= (1 / ixw.resolution); //if the counter has reached the bottom if(ixw.count < (1 / ixw.resolution)) { //clear the timer clearInterval(ixw.clock); ixw.clock = null; //reset the counter ixw.count = 1; //set the original image to the src of the new image ixw.obj.src = ixw.src; } //animate the clip of the new image //using the width and height properties we saved earlier ixw.newimg.style.clip = 'rect(' + ( (/bt|bltr|brtl/.test(ixw.dir)) ? (ixw.size.h * ixw.count) : (/che|cc/.test(ixw.dir)) ? ((ixw.size.h * ixw.count) / 1) : (0) ) + 'px, ' + ( (/lr|tlbr|bltr/.test(ixw.dir)) ? (ixw.size.w - (ixw.size.w * ixw.count)) : (/cve|cc/.test(ixw.dir)) ? (ixw.size.w - ((ixw.size.w * ixw.count) / 1)) : (ixw.size.w) ) + 'px, ' + ( (/tb|tlbr|trbl/.test(ixw.dir)) ? (ixw.size.h - (ixw.size.h * ixw.count)) : (/che|cc/.test(ixw.dir)) ? (ixw.size.h - ((ixw.size.h * ixw.count) / 1)) : (ixw.size.h) ) + 'px, ' + ( (/lr|tlbr|bltr/.test(ixw.dir)) ? (0) : (/tb|bt|che/.test(ixw.dir)) ? (0) : (/cve|cc/.test(ixw.dir)) ? ((ixw.size.w * ixw.count) / 1) : (ixw.size.w * ixw.count) ) + 'px)'; //keep new image in position with original image //in case text size changes mid transition or something ixw.newimg.style.left = ixw.getRealPosition(ixw.obj, 'x') + 'px'; ixw.newimg.style.top = ixw.getRealPosition(ixw.obj, 'y') + 'px'; //if the counter is at the top, which is just after the timer has finished if(ixw.count == 1) { //remove the duplicate image ixw.newimg.parentNode.removeChild(ixw.newimg); } }; //get real position method ixw.getRealPosition = function() { this.pos = (arguments[1] == 'x') ? arguments[0].offsetLeft : arguments[0].offsetTop; this.tmp = arguments[0].offsetParent; while(this.tmp != null) { this.pos += (arguments[1] == 'x') ? this.tmp.offsetLeft : this.tmp.offsetTop; this.tmp = this.tmp.offsetParent; } return this.pos; };
Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="crosswipe.js"></script> <link href="transforma.css" rel="stylesheet" type="text/css" /> <title>Transforma.cat</title> <!--[if lt IE 7]> <script src="IE7.js" type="text/javascript"></script> <![endif]--> </head> <body> <div id="frontal">Carrer Carders 17, 1er 2a<br />08003 Barcelona<br />T +34 932 690 428<br />E <a href="mailto:[email protected]">[email protected]</a></div> <div id="contenido">Página en construcción <br /> Website under construction</div> <div id=fondo><span><img id="test" src="imagenes/imagen1.jpg" /></span> <script> setInterval("crosswipe(document.getElementById('test'),'2', 'tb')",10000); </script> </div> </body> </html>
Código HTML:
body{ font-family:Verdana, Arial, Helvetica, sans-serif; background-color:#999999; font-size:11px; overflow:hidden; margin:0px; padding:0px; line-height:13px; } /* default opacity for IE */ img { filter:alpha(opacity=100); } /* duplicate image positioning */ img.idupe { position:absolute; z-index:30000; visibility:hidden; } A:link, A:visited { text-decoration: none; color:#000000 } A:hover { text-decoration: underline; color:#000000 } #fondo{ position: absolute; z-index:-1; top: 0; left: 0; width: 100%; overflow:hidden; } #frontal{ padding-top:8px; padding-left:8px; position:absolute; height:224px; width:352px; left:16px; top:16px; background-image:url(imagenes/pantalla-trans.png); /*Esta ñapa es para que el png funcione en IE, viva esa panda de ***** */ filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, src='imagenes/pantalla-trans.png', sizingMethod='fit'); z-index:0; } #contenido{ padding-top:8px; padding-left:8px; position:absolute; height:224px; width:352px; left:392px; top:16px; z-index:0; background-color:#FFFFFF; } .imagen{ position: absolute; top: 0; left: 0; width: 100%; } #portada{ position:absolute; left:16px; top:16px; }