Foros del Web » Programando para Internet » Javascript »

Modificar el Nº de columnas según condición

Estas en el tema de Modificar el Nº de columnas según condición en el foro de Javascript en Foros del Web. Hola a todos, tengo una tabla que creo dinámicamente, con varias columnas para mostrar unas fotos de distintos géneros que salen de un array y ...
  #1 (permalink)  
Antiguo 26/01/2014, 14:14
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 3 meses
Puntos: 2
Modificar el Nº de columnas según condición

Hola a todos, tengo una tabla que creo dinámicamente, con varias columnas para mostrar unas fotos de distintos géneros que salen de un array y quiero que al terminar un género,
si en la última fila no completa todas las columnas me queden estas vacías y el siguiente género pase a la siguiente fila y así con todos.

Lo que se me ha ocurrido, no sé si es la mejor opción, es modificar el número de columnas para la última fila de cada género, con el fin de que el nº de columnas sea el mismo que el de fotos a mostrar.
He hecho una función que me cuenta el nº de fotos de cada género pero no se como hacer para que me cambie el nº de columnas en una fila concreta, que sería la última de cada género, según el resultado de esta función.
Saludos

Código Javascript:
Ver original
  1. var fotos = new Array();
  2. fotos = [["paisaje","foto1"],
  3.                 [paisaje","foto2"],
  4.                ["paisaje","foto3"],
  5.                ["monumento","foto4"],
  6.                ["monumento","foto5"],
  7.                ["monumento","foto6"],
  8.                ["deporte","foto7"],
  9.                ["deporte","foto8"],
  10.                ["deporte","foto9"]];
  11.  
  12. var col = 2;
  13. var filas = 2;
  14.  
  15. function countElement(){
  16.     count = 0; 
  17.  
  18.  for(var i in fotos){
  19.    
  20.     if(fotos[i][0] == "paisaje") count++;
  21.         contador = count;
  22.     }
  23.     multiply = contador-(col*filas);     
  24.     if (multiply < parseInt(col)) {
  25.  
  26. // Y hasta aquí he llegado
  27.  
  28.    return ();
  29.  }
  30.  
  31.             Contenido = '<table id=fotos>';
  32.             Contenido += '<tr>'
  33.             for (indC=i*col; indC < i*col+col && indC < fotos.length; indC++)          
  34.             {          
  35.             Contenido += '<td id="genero">'+fotos[indC][0]+'</td>';        
  36.             }                      
  37.             Contenido += '</tr>';
  38.             Contenido += '<tr>';
  39.             for (indC=i*col; indC < i*col+col && indC < fotos.length; indC++)
  40.             {          
  41.             Contenido += '<td class="diapositivas"><img src=\"images/'+fotos[indC][1]+'.jpg\"></td>';          
  42.             }          
  43.             Contenido += '</tr>';          
  44.             Contenido += '</table>';
  45.             res.push(Contenido);
el +col habria que sustituirlo por una función pero lo que he probado no me funciona
  #2 (permalink)  
Antiguo 26/01/2014, 21:20
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Modificar el Nº de columnas según condición

Creo que se vería más ordenado si se mostrara el nombre de la categoría en una celda y las fotos en otra, en lugar de estar creando una celda para cada imagen, porque, por ejemplo, si la fila 1 tiene 4 imágenes, la fila 2 tiene 2 imágenes y la fila 3 tiene 5 imágenes, se vería un poco anti-estética la diferencia de tamaños por cada fila.

Yo te propongo hacerlo así:

Código Javascript:
Ver original
  1. var fotos = {"paisaje": ["fotoP1.jpg", "fotoP2.jpg", "fotoP3.jpg"],
  2.              "monumento": ["fotoM1.jpg", "fotoM2.jpg"],
  3.              "deporte": ["fotoD1.jpg", "fotoD2.jpg", "fotoD3.jpg"]
  4.             },
  5.     tabla = document.createElement("table");
  6.  
  7. for (var i in fotos){
  8.     var fila = document.createElement("tr"),
  9.         columna1 = document.createElement("td"),
  10.         columna2 = document.createElement("td");
  11.    
  12.     columna1.innerHTML = i;
  13.     columna1.style.textAlign = "center";  
  14.     columna2.style.textAlign = "center";
  15.  
  16.     for (var j in fotos[i]){
  17.         var img = document.createElement("img");
  18.         img.src = fotos[i][j];
  19.         columna2.appendChild(img);
  20.     }
  21.     fila.appendChild(columna1);
  22.     fila.appendChild(columna2);
  23.     tabla.appendChild(fila);
  24. }
  25.  
  26. tabla.border = 1;
  27. document.body.appendChild(tabla);

En un objeto literal, inserto los géneros como propiedades de éste y cada uno de ellos tiene asociado a un array con sus respectivas fotos, que en este caso son nombres de ejemplo pero puedes reemplazarlos por los nombres de las imágenes que deseas mostrar. También creo una tabla.

Con ayuda de un bucle, recorro las propiedades del objeto; en cada iteración, creo una fila y dos columnas, a la primera fila le inserto el nombre de la propiedad que representa al género, además, asigno una alineación del texto al centro de cada columna. Con ayuda de otro bucle, recorro el array relacionado a la propiedad actual; en cada iteración, creo un elemento de imagen y le asigno la imagen equivalente a la iteración actual, luego, inserto en la segunda columna al elemento de imagen con la imagen ya asignada.

Culminado el segundo bucle, adhiero ambas columnas a la fila y ésta a la tabla. Así será en cada iteración hasta formar la tabla. Una vez formada la tabla, le asigno un border para delimitar las celdas y la adhiero al cuerpo del documento.

Así es como se verá: http://jsbin.com/AtUKALO/1

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 27/01/2014, 02:51
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 3 meses
Puntos: 2
Respuesta: Modificar el Nº de columnas según condición

La página que estoy haciendo tiene varios botones para ir al principio, anterior, siguiente y al final, y además va a tener un enlace por cada género, entonces mi idea, es empezar mostrando un género, si tiene suficientes fotos, le das al botón de siguiente y pasarías a la siguiente página siguiendo con el mismo género y cuando termine este, en la siguiente fila comenzaría el siguiente y así sucesivamente, hasta terminar todos, si quieres ver exclusivamente un género, pinchas en el enlace correspondiente y solo se mostrarían las fotos correspondientes a ese género, y podrías paginar dentro de ese género con los botones correspondientes, que quieres ver todos los géneros de nuevo, pues he hecho un botón que volvería a mostrar todas las fotos.
Lo del género que aparece encima de cada foto, lo que he hecho también es que me lo muestre en una nueva fila, pero ya ocupando todas las columnas de esa fila, con un texto grande, centrado, etc., para ello lo que hago es un colspan para que ocupe todas las columnas, te muestro la función y la línea de código de la tabla y eso si me funciona bien.
Código Javascript:
Ver original
  1. function generoColspan() {
  2.     var genero;        
  3.     if (array[indC][0] == "001") {     
  4.         genero = '<FONT COLOR="blue">PAISAJE</FONT>';
  5.     }else if (array[indC][0] == "002") {       
  6.         genero = '<FONT COLOR="yellow">DEPORTE</FONT>';
  7.     }else if (array[indC][0] == "003") {
  8.         genero = "RETRATOS";               
  9.     }else if (array[indC][0] == "004") {       
  10.         genero = '<FONT COLOR="green">MONUMENTOS</FONT>';  
  11.                
  12.     }  
  13.     return (genero)
  14.  }
  15.  
  16. Contenido += '<tr>';
  17. for (indC=i*col; indC < i*col+1 && indC < array.length; indC++)
  18. {
  19. Contenido += '<td colspan="2" id="genero">'+generoColspan() +'</td>';
  20. }

Lo he subido a jsfiddle.net/Z93V3/2/ échale un vistazo para que veas la idea, el código no es el mismo que el que estoy utilizando ahora porque hay cosas que no me funcionaban, asi que lo he cambiado, pero en la creación de la tabla si utiliza el mismo código.
Saludos
  #4 (permalink)  
Antiguo 27/01/2014, 08:40
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Modificar el Nº de columnas según condición

Si ya estás paginando, creo deberías hacerlo pero tomando todas las imágenes como si se trataran de la misma categoría, de este modo, irás mostrándolas en páginas sucesivas hasta llegar al final, puedes usar la cantidad de fotos de cada género como un delimitador y con eso podrías insertar el nombre del género cuando acabe uno y empiece el siguiente.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 27/01/2014, 13:44
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 3 meses
Puntos: 2
Respuesta: Modificar el Nº de columnas según condición

Esta idea, para lo que estoy haciendo o pretendo hacer me parece más apropiada. Lo primero sería crear una función que me cuente las fotos de cada género que tengo.

Código Javascript:
Ver original
  1. function contar(count) {    
  2. var count = 0;
  3. //Busca y cuenta cuantos objetos con el código 001 hay
  4. for(var ini in array){
  5.     if(array[ini][0] == "001") count++;
  6.     }  
  7.     return (count)
  8.  }
Una vez que ya sé los objetos de cada especie que tengo el limitador iría en la función que controla la paginación, o sea, dentro de la función mostrarResultados y ya no en la tabla como era mi idea inicial, por lo que te he entendido sería eso, si ves que me cuesta un poco entender las cosas no me lo tengas en cuenta, pero es que de javascript ando un poco justito.

Código Javascript:
Ver original
  1. function numeroPaginasTotal(){
  2.     return Math.ceil(buscarNombre.length/(col*filas))-1;
  3. }
  4.  
  5. function mostrarResultados(pagina){
  6.     var res=[];
  7.     var ini=pagina*filas;
  8.     var fin=Math.min(buscarNombre.length, ini+filas);
  9.     pagActual=pagina;
  10.     for (;ini<fin;ini++)
  11.     {
  12. //y este es el botón de siguiente
  13. btnSiguiente.onclick=function(){ mostrarResultados(Math.min(numeroPaginasTotal(), pagActual+1));
  #6 (permalink)  
Antiguo 27/01/2014, 14:52
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Modificar el Nº de columnas según condición

No te preocupes hermano, al contrario, se ve que captas rápido la idea, solamente pagina con todas las imágenes y el delimitador para diferenciar cuando se están viendo imágenes de uno u otro género, será la cantidad de imágenes que cada género tiene, por lo que solamente te haría falta comprobar si ya se mostraron todas las imágenes en la página actual para mostrar el nombre del siguiente género.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 28/01/2014, 04:25
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 3 meses
Puntos: 2
Respuesta: Modificar el Nº de columnas según condición

La idea y el concepto lo tengo claro, pero ahora me falla el aspecto técnico, ya he modificado el código, estoy intentando hacer lo que tu me dices, pero no lo estoy haciendo bien y no va
  #8 (permalink)  
Antiguo 29/01/2014, 14:25
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 10 años, 3 meses
Puntos: 2
Respuesta: Modificar el Nº de columnas según condición

Me he creado una función pero no sé como meterle el delimitador, no doy con la forma de que me lo muestre como yo quiero, con esta función lógicamente me muestra sólo un género, no sé como hacer lo que me has comentado, estoy bloqueado, agradecería cualquier ayuda.
Saludos

Código Javascript:
Ver original
  1. function mostrar(){
  2.     var cadena= "002"; 
  3.     var n = datos.length;  
  4.     buscarNombre = []; 
  5.     for (var i=0;i<n;i++)  
  6.     {  
  7.         if (datos[i][0].indexOf(cadena)>=0)
  8.         {
  9.             buscarNombre.push(datos[i]);
  10.         }
  11.     }
  12.     txtResultados.innerHTML=buscarNombre.length;
  13.     mostrarResultados(0);  
  14. }

Etiquetas: columnas, condición, funcion, modificar, según
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 16:25.