Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/01/2017, 12:09
kodaichi
 
Fecha de Ingreso: septiembre-2006
Mensajes: 22
Antigüedad: 17 años, 8 meses
Puntos: 0
Comprobar click de multiples elementos

Hola a todos, estoy aprendiendo javascript por mi cuenta y me he topado con un problema al que, por más que busco, no le hallo solución.

Tengo un slider de imágenes con transiciones, en el cual cambio el nombre de la ruta de imagen dependiendo del número de bullet en el que se haya hecho click.

Ej. 'click' en bullet 3 = Cambiar imagen a slider_img3.png

[URL="http://codepen.io/GhostOrder/pen/xgZOao"]Aquí[/URL] dejo el codepen de mi slider:

Hasta aquí todo bien.

El problema viene cuando tengo que añadir mas sliders en la misma pagina pero cada grupo de imágenes tiene un prefijo distinto en su nombre, por ejemplo:

Slider1 : slider1_img1.png, slider1_img2.png, slider1_img3.png
Slider2 : slider2_img1.png, slider2_img2.png, slider2_img3.png

Siendo que la única diferencia en mi función para cambiar imágenes es el nombre de la ruta de imagen, me gustaría usar una sola función que, mediante un condicional, compruebe en que slider se ha hecho clic y dependiendo del resultado cambie el nombre de la ruta de imagen.

No se si me explico bien.

Este fue mi intento y obviamente fallo:

Código javascript:
Ver original
  1. var aboutSectionListItems = document.getElementsByClassName('carousel-index')[0].children; // Lista de bullets del slider 'about'
  2. var helpSectionListItems = document.getElementsByClassName('carousel-index')[1].children; // Lista de bullets del slider 'help'
  3. var imageChanger = document.getElementById('image-container').getElementsByTagName('img'); // elemento <img>
  4. var bulletList = [aboutSectionListItems, helpSectionListItems]; //Array con todos los bullets
  5. var bulletNumber; //Variable con la que se cambia el nombre de la imagen, dependiendo en que número de bullet se haya hecho click.
  6.  
  7. for(i = 0; i < bulletList.length; i++){// basicamente 'i' representa a los contenedores de los bullet del slider
  8.   (function(index){
  9.     for (j = 0; j < bulletList[i].length; j++) {// 'j' representa a los bullets
  10.       var _bulletListSelf = bulletList[i][j];
  11.       bulletList[i][j].onclick = function(){
  12.         bulletNumber = index;
  13.         imageChanger[0].className = "fade-out";
  14.         setTimeout(function (){        
  15.           if(onclick.target == _bulletListSelf[0][j]){// Si se hace click en algun bullet del slider 'about',
  16.           //entonces cambiar la ruta de imagen usando el prefijo 'img/about_slider_'          
  17.             imageChanger[0].setAttribute('src', 'img/about_slider_' + (bulletNumber + 1) + '.png');
  18.           }if(onclick.onclick == _bulletListSelf[1][j]){// Si se hace click en algun bullet del slider 'help',
  19.             //entonces cambiar la ruta de imagen usando el prefijo 'img/help_slider_'                  
  20.             imageChanger[0].setAttribute('src', 'img/help_slider_' + (bulletNumber + 1) + '.png');
  21.           }
  22.         }, 201);
  23.         setTimeout(function (){
  24.           imageChanger[0].className = "fade-in";
  25.         }, 401);
  26.       }
  27.     }
  28.   })(i);
  29. }

Se que la solución más fácil podría sería usar una función para cada slider, pero entonces estaría repitiendo el código muchas veces, prefiero buscar una manera de simplificar e código y hacerlo fácil de mantener.

Como comento en el código, mi idea es comprobar en que bullet se ha hecho click y cambiar la ruta de la imagen dependiendo del resultado.

Si no me explique bien por favor decírmelo, llevo mucho tiempo intentado resolver esto así que estaría muy agradecido si pudieran brindarme ayuda.

Saludos.