Foros del Web » Programando para Internet » Javascript »

Este script en IE no funciona (urgente)

Estas en el tema de Este script en IE no funciona (urgente) en el foro de Javascript en Foros del Web. Hola, Estoy necesitando ayuda con este script. Lo principal es que no quiero que se haga preload de las imágenes principales. Lo que quiero es ...
  #1 (permalink)  
Antiguo 20/07/2006, 15:21
 
Fecha de Ingreso: julio-2006
Ubicación: Montevideo
Mensajes: 34
Antigüedad: 17 años, 9 meses
Puntos: 0
Este script en IE no funciona (urgente)

Hola,

Estoy necesitando ayuda con este script.

Lo principal es que no quiero que se haga preload de las imágenes principales.

Lo que quiero es que al dar la orden de cambiar la imagen, se cree el objeto imagen y una vez cargada haga el cambio...

Para eso utilizo imgName.onload = cambiarimagen();
yo creo que esto es o que no me funciona bien, que en IE si se demora en cargar la imágen se tranca todo, lo que necesitaría saber es como verivicar que se cargo el objeto imagen para luego generar el pedido de que la cambie...


Envío un ejemplo de lo que hablo, si lo ven funcionar en IE se daran cuenta...

armen esta url y verán lo que les digo (no la puedo poner porque el foro no me permite)

200.40.136.20
alejandro_stendelis/prueba
default.hrml

(ojo si lo ven funcionar bien es que carga muy rápido las imágenes, intenten en hacer una imágens mas pesada y verán.

Ayudenmennnnn....

Puedo reacer todo el script si es necesario...

aca les envío el html y abajo agrego las imágenes de ejemplo



Código:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script language="javascript" type="text/javascript">
// Declaramos las variables 
	var its;
	var browserName = '';
	var browserNameLong = '';
	var browserNew = '';
	var preloadFlag = false;
	var Macintosh = navigator.userAgent.indexOf('Mac')>0;

// Verificamos version, agente, plataforma y nombre 
	function its() {
		var n = navigator;
		var ua = ' ' + n.userAgent.toLowerCase();
		var pl = n.platform.toLowerCase();
		var an = n.appName.toLowerCase();
		this.version = n.appVersion;
		this.nn = ua.indexOf('mozilla') > 0;
		if(ua.indexOf('compatible') > 0) {
			this.nn = false;
		}		
		this.opera = ua.indexOf('opera') > 0;
		this.ie = ua.indexOf('msie') > 0;
		this.major = parseInt( this.version );
		this.minor = parseFloat( this.version );
		this.mac = ua.indexOf('mac') > 0;
		this.win = ua.indexOf('win') > 0;
		if(this.ie) {
			if(ua.indexOf("msie 5") > 1) {
				var msieIndex = navigator.appVersion.indexOf("MSIE") + 5;
				this.major = parseFloat(navigator.appVersion.substr(msieIndex,3));
			}
		}
		return this;
	}

// Declaramos las variables de navegador
	function browserNaming() {
		its = new its();		
		if (!document.getElementById) {
			browserNew = false;
		}
		else {
			browserNew = true;
		}
		if (its.opera) {
			browserName = "Opera";
		}
		else if (its.ie) {
			browserName = "IE";
		}
		else {
			browserName = "NS";
		}
		browserNameLong = browserName + its.major;
	}

// Función crear objetos imágen
	function createObject(imgName,imgSrc) {
		if (loadingFlag) {
			eval(imgName + ' = new Image()');
			eval(imgName + '.src = "' + imgSrc + '"');
			return imgName;
		}
	}

// Función cambiar imágen
	function changeImage(layer,imgName,imgObj) {
		if (preloadFlag) {
			if (browserNew) {
				document.getElementById(imgName).src = eval(imgObj+'.src');
			}
			if ((!browserNew) && (browserName == "NS") && (layer!=null)) {
				eval('document.'+layer+'.document.images["'+imgName+'"].src = '+imgObj+'.src');
			}
			else {
				document.images[imgName].src = eval(imgObj+'.src');
			}
		}
	}
		
// Función cambiar texto en layer	
	function rewriteTextLayer(txt,id) {
		txt += "\n";
		if (browserNew && browserName == "NS") {
			botOver = document.getElementById(id);
			range = document.createRange();
			range.setStartBefore(botOver);
			domfrag = range.createContextualFragment(txt);
			while (botOver.hasChildNodes()) {
				botOver.removeChild(botOver.lastChild);
			}
			botOver.appendChild(domfrag);
		}
		else {
			document.all[id].innerHTML = txt;
		}
	}
	







// Chequea el navegador
	browserNaming();

// pone true para poder crear objetos imágenes
	loadingFlag = true;

//setea variables por defecto
	var arrdef = 0
	var derdef = 0

//*****
// Comienza código de carga de imágenes
//*****

//Carga imagenes derecha	
	der = new Array();
	der = "azu;;ver";
	der = der.split(';;');
	
//Arma los objetos de imagen derecha  -----> ej: der_azu_on, der_azu_off
	for(x=0;x<der.length;x++) {
		createObject('der_' + der[x] + '_on' ,'der_' + der[x] + '_on.gif');
		createObject('der_' + der[x] + '_off','der_' + der[x] + '_off.gif');	
	}

//Carga imagenes arr
	arr = new Array();
	arr = "ama;;nar;;roj";
	arr = arr.split(';;');
	
//Arma los objetos de imagen arr  -----> ej: arr_ama_on, arr_nar_on, arr_roj_on
	for(x=0;x<arr.length;x++) {
		createObject('arr_' + arr[x] + '_on' ,'arr_' + arr[x] + '_on.gif');
		createObject('arr_' + arr[x] + '_off','arr_' + arr[x] + '_off.gif');
	}

//Carga imagenes pie
	pie = new Array();
	pie = "ama;;nar;;roj";
	pie = pie.split(';;');
	
//Arma los objetos de imagen pie -----> ej: pie_ama, pie_nar
	for(x=0;x<pie.length;x++) {
		createObject('pie_' + pie[x], 'pie_' + pie[x] + '.gif');
	}

	loadingFlag = false;
	preloadFlag = true;

//Carga textos pie
	tex = new Array();
	tex = "Imagen amarilla;;imagen naranja;;imagen roja";
	tex = tex.split(';;');

// Función cambiar imagen arriba
	function cambiararr(num) {
			// cambia imagen arr a off
			changeImage('','arr_' + arrdef,'arr_' + arr[arrdef] + '_off');
			// cambia arr activo
			arrdef = num;
			// cambia imagen dia a on
			changeImage('','arr_' + arrdef,'arr_' + arr[arrdef] + '_on');
			
			// CAMBIA MIMAGENS SEGUN VARIABLES
			cargarimagen(arrdef,derdef);
	}

// Función cambiar imagen arriba
	function cambiarder(num) {
			// cambia imagen arr a off
			changeImage('','der_' + derdef,'der_' + der[derdef] + '_off');
			// cambia arr activo
			derdef = num;
			// cambia imagen dia a on
			changeImage('','der_' + derdef,'der_' + der[derdef] + '_on');
			// CAMBIA MIMAGENS SEGUN VARIABLES
			cargarimagen();
	}

	// Función cambiar imagen
	function cargarimagen() {
			//carga objetos imagenes 
			imgName = 'img_' + arr[arrdef] + '_' + der[derdef]
			imgSrc  = 'img_' + arr[arrdef] + '_' + der[derdef] + '.gif'
			loadingFlag = true;
			createObject(imgName,imgSrc);
			imgName.onload = cambiarimagen();
			loadingFlag = false;
	}	

	// Función cambiar mapa
	function cambiarimagen() {
		// CAMBIA MAPA SEGUN VARIABLES, TITULO Y KEY		
		changeImage('','pie','pie_' + arr[arrdef]);
		changeImage('','img','img_' + arr[arrdef] + '_' + der[derdef]);
		rewriteTextLayer(tex[arrdef],'txtlayer')
	}	
	
	//inicia imagenes por defecto al inicio
	function loaddef() {
		cambiararr(arrdef);
		cambiarder(derdef);
	}	
	
</script>
</head>

<body onload="loaddef();">
<table width="300" border="0" cellspacing="10">
  <tr>
    <td align="left" valign="top"><a href="javascript:;" onClick="cambiararr(0);"><img src="arr_ama_off.gif" name="arr_0" width="50" height="50" border="0" id="arr_0" /></a></td>
    <td align="left" valign="top"><a href="javascript:;" onClick="cambiararr(1);"><img src="arr_nar_off.gif" name="arr_1" width="50" height="50" border="0" id="arr_1" /></a></td>
    <td align="left" valign="top"><a href="javascript:;" onClick="cambiararr(2);"><img src="arr_roj_off.gif" name="arr_2" width="50" height="50" border="0" id="arr_2" /></a></td>
    <td align="left" valign="top">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="3" rowspan="2" align="left" valign="top"><img src="img_inicio.gif" name="img" width="200" height="200" id="img" /></td>
    <td align="left" valign="top"><a href="javascript:;" onClick="cambiarder(0);"><img src="der_azu_off.gif" name="der_0" width="100" height="100" border="0" id="der_0" /></a></td>
  </tr>
  <tr>
    <td align="left" valign="top"><a href="javascript:;" onClick="cambiarder(1);"><img src="der_ver_off.gif" name="der_1" width="100" height="100" border="0" id="der_1" /></a></td>
  </tr>
  <tr>
    <td colspan="3" align="left" valign="top"><img src="pie_inicio.gif" name="pie" width="200" height="50" id="pie" /></td>
    <td align="left" valign="top"><span id="txtlayer">Imagen inicio </span></td>
  </tr>
</table>
</body>
</html>


Para descargar las imágenes entren en 

200.40.136.20

carpeta alejandro_stendelis/prueba

y los nombres de las imágenes son


arr_ama_off.gif
arr_ama_on.gif
arr_nar_off.gif
arr_nar_on.gif
arr_roj_off.gif
arr_roj_on.gif
der_azu_off.gif
der_azu_on.gif
der_ver_off.gif
der_ver_on.gif
img_inicio.gif
pie_inicio.gif
pie_ama.gif
pie_nar.gif
pie_roj.gif
img_ama_azu.gif
img_ama_ver.gif
img_nar_azu.gif
img_nar_ver.gif
img_roj_azu.gif
img_roj_ver.gif

Última edición por Stendelis; 20/07/2006 a las 15:27
  #2 (permalink)  
Antiguo 21/07/2006, 04:48
 
Fecha de Ingreso: febrero-2005
Mensajes: 38
Antigüedad: 19 años, 2 meses
Puntos: 0
El problema del objeto imagen y las imagenes que cargas directamente como lo haces ... creo que cargas todas las imagenes ... el problema de ello es que al principio te las cargara todas y por eso te puede parecer que va muy lento a la hora de cargar todas las imagenes si fueran enormes...

la ventaja del objeto imagen es que puedes hacer un precarga y una vez cargadas todas las imagenes pues puedes pasar de una a otra sin tener que volverlas a cargar...
  #3 (permalink)  
Antiguo 21/07/2006, 07:24
 
Fecha de Ingreso: julio-2006
Ubicación: Montevideo
Mensajes: 34
Antigüedad: 17 años, 9 meses
Puntos: 0
Cita:
Iniciado por xenius
El problema del objeto imagen y las imagenes que cargas directamente como lo haces ... creo que cargas todas las imagenes ... el problema de ello es que al principio te las cargara todas y por eso te puede parecer que va muy lento a la hora de cargar todas las imagenes si fueran enormes...

la ventaja del objeto imagen es que puedes hacer un precarga y una vez cargadas todas las imagenes pues puedes pasar de una a otra sin tener que volverlas a cargar...
Si pero ese es el caso, no quiero precargar ninguna de estas imágenes, de que forma puedo lograr verificar que un objeto imagen finalizó de cargar...

El evento onload en IE no funciona bien...
  #4 (permalink)  
Antiguo 21/07/2006, 07:53
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Con onload solo puedes saber cuando se leyó el final de la página; (</html>)
Las imágenes (objeto image() o tag img) tienen un atributo booleano que se pone a true (cierto) cuando se ha cargado completamente... "complete"...

Busca en las FAQs javascript un mensaje sobre precarga con porcentaje donde hay un código que yo mismo puse que tal vez pueda ayudarte...

La idea es usar el onload del body para llamar a una función precarga, pero que recursivamente chequee el porcentaje da carga.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:31.