Foros del Web » Programando para Internet » Javascript »

Arrays en JavaScript

Estas en el tema de Arrays en JavaScript en el foro de Javascript en Foros del Web. Hola a todos, tengo una consulta, espero me puedan ayudar: Tengo un script (en javascript) el cual tiene una sentencia como esta: dots[i].obj.left = dots[i].X; ...
  #1 (permalink)  
Antiguo 29/10/2009, 12:08
Avatar de JoseTejada  
Fecha de Ingreso: diciembre-2007
Ubicación: Peru.Lima.Cercado.MDuarez.Granaderos172
Mensajes: 218
Antigüedad: 16 años, 4 meses
Puntos: 11
De acuerdo Arrays en JavaScript

Hola a todos, tengo una consulta, espero me puedan ayudar:
Tengo un script (en javascript) el cual tiene una sentencia como esta:
dots[i].obj.left = dots[i].X;

Y resulta que en Internet Explorer me funciona normal, pero en mozilla (en la conosla de errores) me sale:
dots[i].obj is undefined

Alguien sabe como podría solucinar eso y hacer que mi script funcione. Espero que esto sea suficiente para no colocar todo el código ya que es un poco largo, pero si lo requieren me dicen y lo pongo. Gracias de antemano por su ayuda.
  #2 (permalink)  
Antiguo 29/10/2009, 12: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
Puntos: 1485
Respuesta: Arrays en JavaScript

para poder indicarte la solucion o una explicacion de por qué el error es necesario ver el codigo implicado. esa linea no nos dice nada de que tipo de valor guarda el array y el aparente objeto. si tienes el documento publicado en la web, muestranos la direccion y las instrucciones de como reproducir el error. sino, muestra el codigo necesario...
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 29/10/2009, 12:44
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Arrays en JavaScript

Hola

Nada, no te molestes zerokilled. Me pareció algo prefabricado y buscando un poco encontré esto que soluciona el problema

Código javascript:
Ver original
  1. <script LANGUAGE="JavaScript">
  2. <!--
  3. // image src
  4. var trailsrc = "bullet.gif";
  5.  
  6. var nDots = 7;
  7. var Xbpos = 0;
  8. var Ybpos = 0;
  9.  
  10. // fixed time step, no relation to real time
  11. var DELTAT = .01;
  12. // size of one spring in pixels
  13. var SEGLEN = 10;
  14. // spring constant, stiffness of springs
  15. var SPRINGK = 10;
  16. // all the physics is bogus, just picked stuff to make it look okay
  17. var MASS = 1;
  18. // Positive XGRAVITY pulls right, negative pulls left
  19. // Positive YGRAVITY pulls down, negative up
  20. var XGRAVITY = 0;
  21. var YGRAVITY = 50;
  22. // RESISTANCE determines a slowing force proportional to velocity
  23. var RESISTANCE = 10;
  24. // stopping criterea to prevent endless jittering
  25. // doesn't work when sitting on bottom since floor
  26. // doesn't push back so acceleration always as big
  27. // as gravity
  28. var STOPVEL = 0.1;
  29. var STOPACC = 0.1;
  30. var DOTSIZE = 0;
  31. // BOUNCE is percent of velocity retained when
  32. // bouncing off a wall
  33. var BOUNCE = 0.75;
  34.  
  35. var ff=(document.getElementById&&!document.all);
  36. var ns=(document.layers);
  37. var ie=(document.all);
  38.  
  39. // always on for now, could be played with to
  40. // let dots fall to botton, get thrown, etc.
  41. var followmouse = true;
  42. var dots = new Array();
  43.  
  44. function init()
  45. {
  46. var i = 0;
  47. for (i = 0; i < nDots; i++) {
  48. dots[i] = new dot(i);
  49. }
  50.  
  51. // set their positions
  52. for (i = 0; i < nDots; i++) {
  53. dots[i].obj.left = dots[i].X;
  54. dots[i].obj.top = dots[i].Y;
  55. }
  56.  
  57. setTimeout("startanimate()", 10);
  58. }
  59.  
  60. function dot(i)
  61. {
  62. this.X = Xbpos;
  63. this.Y = Ybpos;
  64. this.dx = 0;
  65. this.dy = 0;
  66.  
  67. if (ns){
  68. document.write("<layer id=\"mtrail"+ i +"\" ><img src='"+trailsrc+"' border=\"0\"><\/layer>");
  69. } else if (ie||ff) {
  70. if (i == 0) {
  71. document.write("<div id=\"mtrail"+ i +"\" style=\"POSITION: absolute; VISIBILITY: hidden;\"><img src='"+trailsrc+"' border=\"0\"><\/div>");
  72. } else {
  73. document.write("<div id=\"mtrail"+ i +"\" style=\"POSITION: absolute; \"><img src='"+trailsrc+"' border=\"0\"><\/div>");
  74. }
  75. }
  76.  
  77. if (ie)
  78. {
  79. this.obj = eval("mtrail" + i + ".style");
  80. } else if (ff)
  81. {
  82. this.obj = document.getElementById("mtrail" + i).style;
  83. }
  84. else
  85. {
  86. this.obj = eval("document.mtrail" + i);
  87. }
  88. }
  89.  
  90. function startanimate() {
  91. setInterval("animate()", 20);
  92. }
  93.  
  94. // just save mouse position for animate() to use
  95. function MoveHandler(e)
  96. {
  97. if (ie) {
  98. Xbpos = window.event.x + document.body.scrollLeft;
  99. Ybpos = window.event.y + document.body.scrollTop;
  100. }
  101. else {
  102. Xbpos = e.pageX;
  103. Ybpos = e.pageY;
  104. }
  105. }
  106.  
  107. function vec(X, Y)
  108. {
  109. this.X = X;
  110. this.Y = Y;
  111. }
  112.  
  113. // adds force in X and Y to spring for dot[i] on dot[j]
  114. function springForce(i, j, spring)
  115. {
  116. var dx = (dots[i].X - dots[j].X);
  117. var dy = (dots[i].Y - dots[j].Y);
  118. var len = Math.sqrt(dx*dx + dy*dy);
  119. if (len > SEGLEN) {
  120. var springF = SPRINGK * (len - SEGLEN);
  121. spring.X += (dx / len) * springF;
  122. spring.Y += (dy / len) * springF;
  123. }
  124. }
  125.  
  126.  
  127. function animate() {
  128. // dots[0] follows the mouse,
  129. // though no dot is drawn there
  130. var start = 0;
  131. if (followmouse) {
  132. dots[0].X = Xbpos;
  133. dots[0].Y = Ybpos;
  134. start = 1;
  135. }
  136.  
  137. for (i = start ; i < nDots; i++ ) {
  138.  
  139. var spring = new vec(0, 0);
  140. if (i > 0) {
  141. springForce(i-1, i, spring);
  142. }
  143. if (i < (nDots - 1)) {
  144. springForce(i+1, i, spring);
  145. }
  146.  
  147. // air resisitance/friction
  148. var resist = new vec(-dots[i].dx * RESISTANCE,
  149. -dots[i].dy * RESISTANCE);
  150.  
  151. // compute new accel, including gravity
  152. var accel = new vec((spring.X + resist.X)/MASS + XGRAVITY,
  153. (spring.Y + resist.Y)/ MASS + YGRAVITY);
  154.  
  155. // compute new velocity
  156. dots[i].dx += (DELTAT * accel.X);
  157. dots[i].dy += (DELTAT * accel.Y);
  158.  
  159. // stop dead so it doesn't jitter when nearly still
  160. if (Math.abs(dots[i].dx) < STOPVEL &&
  161. Math.abs(dots[i].dy) < STOPVEL &&
  162. Math.abs(accel.X) < STOPACC &&
  163. Math.abs(accel.Y) < STOPACC) {
  164. dots[i].dx = 0;
  165. dots[i].dy = 0;
  166. }
  167.  
  168. // move to new position
  169. dots[i].X += dots[i].dx;
  170. dots[i].Y += dots[i].dy;
  171.  
  172. // get size of window
  173. var height, width;
  174. if (!ie) {
  175. height = window.innerHeight + window.pageYOffset;
  176. width = window.innerWidth + window.pageXOffset;
  177. } else {
  178. height = document.body.clientHeight + document.body.scrollTop;
  179. width = document.body.clientWidth + document.body.scrollLeft;
  180. }
  181.  
  182. // bounce off 3 walls (leave ceiling open)
  183. if (dots[i].Y >= height - DOTSIZE - 1) {
  184. if (dots[i].dy > 0) {
  185. dots[i].dy = BOUNCE * -dots[i].dy;
  186. }
  187. dots[i].Y = height - DOTSIZE - 1;
  188. }
  189. if (dots[i].X >= width - DOTSIZE) {
  190. if (dots[i].dx > 0) {
  191. dots[i].dx = BOUNCE * -dots[i].dx;
  192. }
  193. dots[i].X = width - DOTSIZE - 1;
  194. }
  195. if (dots[i].X < 0) {
  196. if (dots[i].dx < 0) {
  197. dots[i].dx = BOUNCE * -dots[i].dx;
  198. }
  199. dots[i].X = 0;
  200. }
  201.  
  202. // move img to new position
  203. dots[i].obj.left = dots[i].X;
  204. dots[i].obj.top = dots[i].Y;
  205. }
  206. }
  207.  
  208. init();
  209. if(ns)window.captureEvents(Event.MOUSEMOVE);
  210. document.onmousemove = MoveHandler;
  211. -->
  212. </script>

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #4 (permalink)  
Antiguo 29/10/2009, 13:56
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
Puntos: 1485
Respuesta: Arrays en JavaScript

@Adler,
¡se te agradece mucho! use el codigo como base para saber de que se trataba el codigo y resulta que lo encontre en dynamicdrive bajo el nombre elastic trail.


@JoseTejada,
el efecto es interesante pero el codigo es una asquerosidad. si buscas en dynamicdrive, claramente dice que el codigo solo funciona en iexplorer y opera. no tengo animo de corregir codigos prefabricados, pero si le pones esfuerzo de tu parte estoy dispuesto ayudarte. si otro miembro te lo quiere dar ya corregido, pues nada no me voy a molestar. solo que yo no trabajo de esa forma.


edit @ 15:11,
mmm, no habia leido el mensaje completo de Adler... la version que publica Adler funciona pero tiene un pequeñito detalle diferente al que encontre en dynamicdrive. pero nada, ya pasó...
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 29/10/2009 a las 14:12
  #5 (permalink)  
Antiguo 31/10/2009, 00:35
Avatar de JoseTejada  
Fecha de Ingreso: diciembre-2007
Ubicación: Peru.Lima.Cercado.MDuarez.Granaderos172
Mensajes: 218
Antigüedad: 16 años, 4 meses
Puntos: 11
Respuesta: Arrays en JavaScript

Bueno, antes que nada gracias por el interés; resulta que ese código lo saqué de una aplicación con un montón de scripts para animación y no de una web, y les cuento que en ninguna parte dice que sólo funciona en IE y opera, pero si dice eso en donde lo lo han encontrado gracias por la información. En ralidad lo único que buscaba era saber por qué me lanza ese error, pero veo que en Firefox simplemente no funciona eso.

P.D.- principalmente me dedico a hacer scripts php y no javascript, pero quisé ponerle esa animación a una página en particular por petición del cliente, y no es que no haya puesto de mi parte para solucionar eso, sino que no domino mucho el tema y decidí pedir ayuda aquí. Nuevamente gracias y hasta otra oportunidad.
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 07:03.