Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] control de carga de videos

Estas en el tema de control de carga de videos en el foro de Javascript en Foros del Web. hola de nuevo a ver si me podeis explicar porque no me funciona el siguiente control de carga de videos. pongamos que el html es ...
  #1 (permalink)  
Antiguo 07/03/2013, 02:39
 
Fecha de Ingreso: agosto-2007
Mensajes: 130
Antigüedad: 17 años, 3 meses
Puntos: 0
control de carga de videos

hola de nuevo

a ver si me podeis explicar porque no me funciona el siguiente control de carga de videos.

pongamos que el html es el siguiente:
Código:
<body onload='addlisteners'>
<div class='videoplayer'>
<video src='video1.mp4' type='video/mp4'></video>
<p id='loadStatus'>movie loading...</p>
</div>
<div class='videoplayer'>
<video src='video2.mp4' type='video/mp4'></video>
<p id='loadStatus'>movie loading...</p>
</div>
</body>
y el js, el siguiente:
Código:
function getPercentProg(vd,tg) {
	var endBuf = vd.buffered.end(0);
	var soFar = parseInt(((endBuf / vd.duration) * 100));
	var stat = tg.getElementsByTagName('p')[0];
	stat.innerHTML = soFar + '%';	
}
function myAutoPlay(vd,tg) {
	vd.play();
	x = tg.getElementsByTagName('p')[0];
	tg.removeChild(x);
}
function addlisteners(){	
	var divs = document.querySelectorAll('.video-player');
	var videos = document.querySelectorAll('video');	
	videos[0].addEventListener('progress', function() { getPercentProg(videos[0],divs[0]) }, false);
	videos[0].addEventListener('canplaythrough', function() { myAutoPlay(videos[0],divs[0]); }, false);
}
cabe decir que este codigo funciona: detecta el video 1, empieza a cargar y muestra un porcentaje de carga, que es eliminado al hacer autoplay.
para el segundo video, si cambio la funcion addlisteners por la que sigue, tambien funciona
Código:
function addlisteners(){	
	var divs = document.querySelectorAll('.video-player');
	var videos = document.querySelectorAll('video');	
	videos[0].addEventListener('progress', function() { getPercentProg(videos[0],divs[0]) }, false);
	videos[0].addEventListener('canplaythrough', function() { myAutoPlay(videos[0],divs[0]); }, false);	
	videos[1].addEventListener('progress', function() { getPercentProg(videos[1],divs[1]) }, false);
	videos[1].addEventListener('canplaythrough', function() { myAutoPlay(videos[1],divs[1]); }, false);
}
el problema viene cuando en el html tengo muchos mas videos y quiero realizar un bucle en la funcion addlisteners. deja de funcionar...
Código:
function addlisteners(){	
	var divs = document.querySelectorAll('.video-player');
	var videos = document.querySelectorAll('video');
	for (i = 0; i < videos.length; i++) {
		videos[i].addEventListener('progress', function() { getPercentProg(videos[i],divs[i]) }, false);
		videos[i].addEventListener('canplaythrough', function() { myAutoPlay(videos[i],divs[i]); }, false);
	}
}
incluso poniendo lo siguiente, tampoco funciona:
Código:
i=0;
videos[i].addEventListener('progress', function() { getPercentProg(videos[i],divs[i]) }, false);
videos[i].addEventListener('canplaythrough', function() { myAutoPlay(videos[i],divs[i]); }, false);
i=1;
videos[i].addEventListener('progress', function() { getPercentProg(videos[i],divs[i]) }, false);
videos[i].addEventListener('canplaythrough', function() { myAutoPlay(videos[i],divs[i]); }, false);
alguien podria explicarme donde esta el error...?

milchisimas gracias
  #2 (permalink)  
Antiguo 07/03/2013, 06:50
 
Fecha de Ingreso: agosto-2007
Mensajes: 130
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: control de carga de videos

veo que el problema viene del manejo de eventos en general:

el siguiente codigo funciona
Código:
<html>
<head>
<script>
function nuevoEvento(elemento, evento, funcion) { elemento.addEventListener(evento, funcion, false); } 
function mensaje() { alert("boton pulsado"); } 
function inicia() {
	var divs = document.querySelectorAll('.btn');
    	nuevoEvento(divs[0],"click",mensaje);
}
</script>
</head>
<body onload="inicia()">
	<button class='btn'>Hola0</button>
	<button class='btn'>Hola1</button>
	<button class='btn'>Hola2</button>
	<button class='btn'>Hola3</button>
	<button class='btn'>Hola4</button>
</body>
</html>
pero el siguiente no:

Código:
<html>
<head>
<script>
function nuevoEvento(elemento, evento, funcion) { elemento.addEventListener(evento, funcion, false); } 
function mensaje() { alert("boton pulsado"); } 
function inicia() {
	var divs = document.querySelectorAll('.btn');
    	for (i = 0; i < divs.length; i++) {
    	    	nuevoEvento(divs[i],"click",mensaje);
    	}
}
</script>
</head>
<body onload="inicia()">
	<button class='btn'>Hola0</button>
	<button class='btn'>Hola1</button>
	<button class='btn'>Hola2</button>
	<button class='btn'>Hola3</button>
	<button class='btn'>Hola4</button>
</body>
</html>
¿como se pueden asignar eventos a varios elementos?

mil gracias
  #3 (permalink)  
Antiguo 07/03/2013, 07:12
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: control de carga de videos

debería de funcionar. los cambios que yo haría serían estos
Cita:
var divs = document.querySelectorAll('button.btn');
for (var i = 0; i < divs.length; i++) {
nuevoEvento(divs[i],"click",function() {mensaje()});
ten en mente que ie8- no acepta el método addEventListener()
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #4 (permalink)  
Antiguo 07/03/2013, 07:20
 
Fecha de Ingreso: agosto-2007
Mensajes: 130
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: control de carga de videos

gracias por tu respuesta, IsaBelM, pero sigue sin funcionar... creo que debe pasar algo con eventos y bucles, pero mi escaso conocimiento me impide ver mas alla...
  #5 (permalink)  
Antiguo 07/03/2013, 07:30
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: control de carga de videos

lo he probado y funciona. puedes hacer estas correcciones, pero ya te digo que el código es correcto
Cita:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
<script>
//function nuevoEvento(elemento, evento, funcion) { elemento.addEventListener(evento, funcion, false); }

function nuevoEvento(elemento, nomevento, fnc) {

if (elemento.addEventListener) {
elemento.addEventListener(nomevento, function(e) { fnc.call(elemento, e); }, false);
} else if (elemento.attachEvent) {
elemento.attachEvent('on' + nomevento, function() { fnc.call(elemento); });
}
}


function mensaje() { alert("boton pulsado"); }
function inicia() {
var divs = document.querySelectorAll('button.btn');
for (var i = 0; i < divs.length; i++) {
nuevoEvento(divs[i],"click",function() {mensaje()});
}
}


window.onload = function(){inicia()};
</script>
</head>
<body>
<button class='btn'>Hola0</button>
<button class='btn'>Hola1</button>
<button class='btn'>Hola2</button>
<button class='btn'>Hola3</button>
<button class='btn'>Hola4</button>
</body>
</html>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #6 (permalink)  
Antiguo 07/03/2013, 07:51
 
Fecha de Ingreso: agosto-2007
Mensajes: 130
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: control de carga de videos

MIL GRACIAS, IsaBelM!
he probado tu codigo y funciona... asi que ahora voy a ver por que a mi no me funcionaba.
  #7 (permalink)  
Antiguo 07/03/2013, 09:00
 
Fecha de Ingreso: agosto-2007
Mensajes: 130
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: control de carga de videos

tambien he comprobado que mi codigo en los videos seguia fallando pero se debia a que la variable i que se enviaba a traves del evento perdia su valor de bucle. lo solucione usando una closure para poder enviar la variable.

gracias a tod@s

Etiquetas: control, funcion, html, js, select, videos
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 20:02.