Foros del Web » Programando para Internet » Javascript »

Pausar Ejecucion de JS

Estas en el tema de Pausar Ejecucion de JS en el foro de Javascript en Foros del Web. Hola, tengo una duda, nesesito que la ejecucion del script se pause durate un tiempo, en este tiempo nose pueda ejecutar ningun otra funcion....
  #1 (permalink)  
Antiguo 29/01/2010, 15:32
Avatar de ClubIce  
Fecha de Ingreso: diciembre-2008
Mensajes: 216
Antigüedad: 16 años
Puntos: 2
Pausar Ejecucion de JS

Hola,

tengo una duda, nesesito que la ejecucion del script se pause durate un tiempo, en este tiempo nose pueda ejecutar ningun otra funcion.
  #2 (permalink)  
Antiguo 29/01/2010, 16:05
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Pausar Ejecucion de JS

¿algo como sleep en php? pues jamas he visto alguna instruccion en javascript para detener la ejecucion salvo las ventanas modales: alert, confirm, prompt. pero en javascript tampoco se puede autoreponsder una ventana modal. de momento, lo unico que se me ocurre es dividir el codigo en partes para ser invocado por setTimeout pero a mi jucio el codigo no quedara "elegante".
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 29/01/2010, 16:22
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Pausar Ejecucion de JS

un tema que encontre haciendo busqueda en google con terminos javascript sleep. no lo he leido detenidamente pro quizas te ayude. http://www.daniweb.com/forums/thread47199.html
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #4 (permalink)  
Antiguo 29/01/2010, 19:16
Avatar de ClubIce  
Fecha de Ingreso: diciembre-2008
Mensajes: 216
Antigüedad: 16 años
Puntos: 2
Respuesta: Pausar Ejecucion de JS

ya revise la pagina y el metodo que usan no es lo que yo esperaba. por lo que veo es que la unica forma es usando setTimeot, pero ahora el problem es como hago para aplicar eso en el siguiente script

Código Javascript:
Ver original
  1. //El script es demaciado largo, por eso solo mostrare la funcion que hace que el script funcion
  2. //la funcion showText muestra un texto convertido en imagen dentro de un div. Como el espacio
  3. //del div es limitado tengo que hacer varios showText para mostrar todo el texto:
  4. function z1_s1() {
  5.   showText("blablablablablabla",Red) //Red es el nombre del estilo de la imagten a utilizar
  6.   showText("blablablablablabla",Red)
  7.   showText("blablablablablabla",Red)
  8.   showText("blablablablablabla",Red)
  9.   //el problema es que el showText sobrescribe el anterior de tal forma que se ba a mostrar el
  10.   //ultimo showText, ahora como hago para que JS espere que el usuario haya precionada un
  11.  //tecla para que pase el siguiente showText???
  12. }
  #5 (permalink)  
Antiguo 29/01/2010, 19:31
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Pausar Ejecucion de JS

en este caso no creo que setTimout sea la solucion ya que requieres que pase a la proxima instruccion por accion del usuario. asi de momento, lo que se me ocurre es una funcion que se encarga de invocar tus funciones, pero una a una. estas funciones estan almacenada en un array. en cada llamada de esta funcion se invoca una sola funcion del array y se elimina del array. no es la mejor forma de escribirlo pero si de ilustrarlo, por ejemplo:
Código:
var funciones = [function(){
// si tu funcion requiere parametros, creas funciones anonimas como en este ejemplo;
// y dentro de esa funcion haces la invocacion con los argumentos necesarios;
alert('primera funcion');
},
function(){
alert('segunda funcion');
},
function(){
alert('tercera y ultima funcion');
}
];

function caller(){
try{
funciones.shift()();
}catch(e){}
}
caller vendria siendo la funcion que debe invocarse cuando el usuario requiera pasar al proximo.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 30/01/2010 a las 12:37 Razón: simplificar una linea de codigo
  #6 (permalink)  
Antiguo 29/01/2010, 19:37
Avatar de ClubIce  
Fecha de Ingreso: diciembre-2008
Mensajes: 216
Antigüedad: 16 años
Puntos: 2
Respuesta: Pausar Ejecucion de JS

no entendi muy bien la funcion caller(), me podrias esplicar mejor?
  #7 (permalink)  
Antiguo 29/01/2010, 19:41
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Pausar Ejecucion de JS

ademas del codigo que mostre, agrega lo siguiente. lo cargas en el navegador y luego vas haciendo click. veras que cada vez que caller se invoca, en este caso por medio del evento onclick, dentro de caller se invoca las funciones que antes defini en el array. en cada invocacion de caller se invoca una funcion distinta.
Código:
self.onclick = caller;
lo mismo puede aplicarse el boton que tendra el usuario. o al control que vayas a proveerle al usuario.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #8 (permalink)  
Antiguo 29/01/2010, 19:50
Avatar de ClubIce  
Fecha de Ingreso: diciembre-2008
Mensajes: 216
Antigüedad: 16 años
Puntos: 2
Respuesta: Pausar Ejecucion de JS

bueno, creo que ya entendi y como puedo modificarlo, ahora para evitar hacer mas post quiero que me ayudes en el siguiente script

Código Javascript:
Ver original
  1. Sprite=function(image,width,height,hmargin,vmargin,hspace,vspace,rows,cols) {
  2.  this.numItems=rows*cols;
  3.  image=new Image().src=image;
  4.  this.frames=new Array();
  5.  for (i=0; i<cols; i++) {
  6.   for (j=0; j<rows; i++) {
  7.    x=hmargin+(width*j)+(hspace*j)
  8.    y=vmargin+(height*i)+(vspace*i)
  9.    this.frames[i*cols+j]={image:image,width:width,height:height,x:x,y:y}
  10.   }
  11.  }
  12. }
  13.  
  14. Animation=function(spr,spd) {
  15.  this={
  16.   sprite:spr,
  17.   speed:spd,
  18.   frames:[]
  19.  };
  20. }
  21. Animation.prototype={
  22.  addFrame: function (id) {
  23.   spr=this;
  24.   this.frames[frames.length]={
  25.    id:id,
  26.    sprite:"url('"+spr.sprite.image.src+"') "+spr.sprite.frames[id].x+"px "+spr.sprite.frames[id].y+"px;"
  27.   }
  28.  },
  29.  drawAnimation:function (container, id) {
  30.   image=createElement('img')
  31.   image.setAtributte('src','empy.gif')
  32.   image.setAtributte('style',"background:"+this.frames[0].sprite)
  33.   image.setAtributte('class','animation')
  34.   image.setAttribute('id',id)
  35.   container.appendChild(image)
  36.   this.id=id
  37.   this.Play();
  38.  }
  39. }

la consola de erroes me dice:

Error: invalid assignment left-hand side
Línea: 19, columna: 5
Código fuente:
this={

no se que es lo que causa el error ya he intentado muchas cosas

PS: perdon por los errores del script, es que es hecho a mano

Última edición por ClubIce; 29/01/2010 a las 20:22
  #9 (permalink)  
Antiguo 29/01/2010, 20:29
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Pausar Ejecucion de JS

el problema esta en la funcion Animation. hay varias razones para que suceda dicho error pero en este caso es porque estas intentando asignar un valor directamente al objeto this. a mi entender, tu quieres inicializar this con un objeto que ya tiene las propiedades declaradas. no estoy muy claro porque nunca lo he realizado de esa manera, pero creo que no puedes hacerlo asi porque this es un objeto reservado para ese constructor.

tienes dos opciones: al estilo vieja escuela, o creas una funcion que inicialice this pasandole un objeto. quizas la segunda opcion parece estupida, pero veremos. la vieja escuela es la forma comun y corriente.
Código:
function(){
this.nombre = valor;
// se repite tantas veces sea necesario inicializar el objeto;
...
}
la otra opcion, es una funcion que itera por las propiedades de un objeto y se van asignando al objeto this. quizas algo como sigue:
Código:
Object.prototype.initialize = function(init){
for(var prop in init)if(init.hasOwnProperty(prop)) this[prop] = init[prop];
}

// se usa de la siguiente manera;
Animation = function(sprite, speed){
this.initialize({spr: sprite, spd: speed, frame:[]});
}
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #10 (permalink)  
Antiguo 29/01/2010, 20:52
Avatar de ClubIce  
Fecha de Ingreso: diciembre-2008
Mensajes: 216
Antigüedad: 16 años
Puntos: 2
Respuesta: Pausar Ejecucion de JS

Gracias por tu ayuda t etendre n cuentra
  #11 (permalink)  
Antiguo 29/01/2010, 22:37
Avatar de ClubIce  
Fecha de Ingreso: diciembre-2008
Mensajes: 216
Antigüedad: 16 años
Puntos: 2
Respuesta: Pausar Ejecucion de JS

Hola, aqui estoy de nuevo, ya estoy arreglando el anterior script y se me presenta un error:

Código Javascript:
Ver original
  1. Animation=function(spr,spd) {
  2.  this.initialize({
  3.   sprite:spr,
  4.   speed:spd,
  5.   frames:[]
  6.  });
  7. }
  8. Animation.prototype={
  9.  addFrame: function (id) {
  10.   spr=this
  11.   this.frames[frames.length]={
  12.    id:id,
  13.    sprite:"url('"+spr.sprite.image.src+"') "+spr.sprite.frames[id].x+"px "+spr.sprite.frames[id].y+"px;"
  14.   }
  15.  },
  16.  drawAnimation:function (container, id) {
  17.   image=document.createElement('img')
  18.   image.setAttribute('src','empy.gif')
  19.   image.setAttribute('style',"background:"+this.frames[0].sprite)
  20.   image.setAttribute('class','animation')
  21.   image.setAttribute('width',this.sprite.width)
  22.   image.setAttribute('height,this.sprite.height')
  23.   image.setAttribute('id',id)
  24.   container.appendChild(image)
  25.   this.id=id
  26.   this.Play();
  27.  }
  28. }
  29. avatar=new Sprite('sprites/avatars/ash_walking.gif',28,38,0,0,0,2,3,4);
  30. aniAvatar=new Animation(avatar,5);
  31. aniAvatar.addFrame(0);

al ejecutarlo me muestra el siguiente error:
Error: spr.sprite.image is undefined
Archivo de origen: http://localhost/icepokemon/index.htm
Línea: 35

en realidad es que no se como acceder a this.sprite.image.src dentro de otra la inicializacion de otro???
  #12 (permalink)  
Antiguo 29/01/2010, 23:13
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Pausar Ejecucion de JS

¿que tipo de dato es spr..sprite.image? aparentemente no estas pasando el valor correcto cuando creas una instancia de Animation.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #13 (permalink)  
Antiguo 29/01/2010, 23:18
Avatar de ClubIce  
Fecha de Ingreso: diciembre-2008
Mensajes: 216
Antigüedad: 16 años
Puntos: 2
Respuesta: Pausar Ejecucion de JS

con la funcion Sprite() recibo el dato como url y luego lo combierto en Image(), depues lo paso como Sprite a Animation, luego en animation nesesito obtener la url del image()
  #14 (permalink)  
Antiguo 29/01/2010, 23:34
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Pausar Ejecucion de JS

si bien entiendo, tu creas una instancia de Sprite. luego esa instancia se la pasas como argumento a Animation. bien, si vuelve al mensaje #8 en la linea #3 de tu codigo estas creando una variable llamada image en lugar de crear una propiedad image para la clase Sprite.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #15 (permalink)  
Antiguo 29/01/2010, 23:45
Avatar de ClubIce  
Fecha de Ingreso: diciembre-2008
Mensajes: 216
Antigüedad: 16 años
Puntos: 2
Respuesta: Pausar Ejecucion de JS

hay, por todos los cielos, simpre se me olvidan estos detalles.
de nuevo gracias por tu ayuda

Etiquetas: ejecucion, js, pausar
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 21:11.