$(document).ready(function(){ console.log('Inicio JQuery'); //Manipulacion Titulo document.title = "Grilla"; //Celdas var cantidadCeldas = 4; //DefiniciĆ³n del lado (todo el documento) var d; var contenedor = $(document); if( contenedor.width() > contenedor.height()) { d = contenedor.height(); } else { d = contenedor.width(); } d*=0.9; //console.log(d); //BORDE $('<div id="grilla-borde"></div>').appendTo('body'); $('#grilla-borde').css('width', d + 'px'); $('#grilla-borde').css('height', d + 'px'); //INTERIOR $('<div id="grilla-interna"></div>').appendTo('#grilla-borde'); $('#grilla-interna').css('width', 90 + '%'); $('#grilla-interna').css('height', 90 + '%'); $('#grilla-interna').css('margin', 5 + '%'); //ABAJO $('<div id="info" style="text-align:center; font-size:3em;"></div>').appendTo('body'); //FILAS var altoFilas = 0.9*100/cantidadCeldas; var marginTopFilas = 0.1*100/(cantidadCeldas - 1); var anchoFilas = 100/1; for( var i = 0 ; i < cantidadCeldas ; i++) { $('<div class="filas ' + 'fila_' + (i+1) + '"></div>').appendTo('#grilla-interna'); } $('.filas').each( function() { $(this).css('width', anchoFilas + '%'); $(this).css('height', altoFilas + '%'); if( ! $(this).is(':first-child') ) { $(this).css('margin-top', marginTopFilas + '%'); } }); //CELDAS var altoCeldas = 100/1; var anchoCeldas = 0.9*100/cantidadCeldas; var leftCeldas = 0.1*100/(cantidadCeldas - 1); for( var i = 0 ; i < cantidadCeldas ; i++) for( var j = 1 ; j <= cantidadCeldas ; j++) { $('<div class="celdas ' + 'columna_' + (i+1) + ' "></div>').appendTo('#grilla-interna .filas:nth-child(' + j + ')'); } $('.celdas').each( function() { $(this).css('width', anchoCeldas + '%'); $(this).css('height', altoCeldas + '%'); if( ! $(this).is(':first-child') ) { $(this).css('margin-left', leftCeldas + '%'); } }); //LLENAR for( var i = 1 ; i <= cantidadCeldas ; i++) { for( var j = 1 ; j <= cantidadCeldas ; j++) { //$('<div class="ficha"></div>').appendTo('.filas:nth-child(' + i + ') .celdas:nth-child(' + j + ')'); spawnFicha(i,j); } } //EL LUGAR LIBRE $('#grilla-interna').children(':last-child').children(':last-child').children('.ficha').attr('id','vacio'); $('#vacio').removeClass('ficha'); $('#vacio').css('background-color', $('#vacio').parent().css('background-color') ); //AL HACER CLICK EN UNA FICHA $('body').on('click', '.ficha', function() { if( $('#vacio').attr('class') === '' ) { //FILA Y COLUMNA var filaClick = getFila( $(this) ); var columnaClick = getColumna( $(this) ); //FILLA Y COLUMNA DEL VACIO var filaVacio = getFila( $('#vacio') ); var columnaVacio = getColumna( $('#vacio') ); //MOVIMIENTO LATERAL if(filaClick === filaVacio) { //DE IZQUIERDA A DERECHA if( columnaClick < columnaVacio ) { for(i=columnaClick; i < columnaVacio; i++) { moverFicha(filaClick,i,'moverDerecha'); } } //DE DERECHA A IZQUIERDA if( columnaClick > columnaVacio ) { for(i=columnaClick; i > columnaVacio; i--) { moverFicha(filaClick,i,'moverIzquierda'); } } $('#vacio').addClass(filaClick + '-' + columnaClick); }//LATERAL //MOVIMIENTO HORIZONTAL if(columnaClick === columnaVacio) { //DE ABAJO A ARRIBA if( filaClick > filaVacio ) { for(i=filaClick; i > filaVacio; i--) { moverFicha(i, columnaClick, 'moverArriba'); } } //DE ARRIBA A ABAJO if( filaClick < filaVacio ) { for(i=filaClick; i < filaVacio; i++) { moverFicha(i, columnaClick, 'moverAbajo'); } } $('#vacio').addClass(filaClick + '-' + columnaClick); }//HORIZONTAL //INFO console.log('Vacio fila ' + filaVacio + ' - Columna ' + columnaVacio); console.log('Click Fila ' + filaClick + ' - Columna ' + columnaClick); //$('#info').text('Fila ' + filaClick + ' - Columna ' + columnaClick); } }); //AL POSARSE SOBRE $('body').on('mouseover', '.ficha', function() { $(this).css('background-color','#B71234'); }); $('body').on('mouseout', '.ficha', function() { $(this).css('background-color','#009900'); }); //GETTERS function getFila(elemento) { return elemento.parent().parent().attr('class').split('_')[1]; } function getColumna(elemento) { return elemento.parent().attr('class').split('_')[1]; } function moverFicha(fila,columna,sentido) { var ficha = $('.fila_'+fila).children('.columna_'+columna).children('.ficha'); ficha.addClass(sentido); //DERECHA, IZQUIERDA } //SPAWN function spawnFicha(fila,columna) { $('.fila_'+fila).children('.columna_'+columna).append('<div class="ficha"></div>'); } //Al FINALIZAR function listener() { console.log('listener'); //PUEDE PASAR A VARIABLE GLOBAL var nuevaFilaVacia = $('#vacio').attr('class').split('-')[0]; var nuevaColumnaVacia = $('#vacio').attr('class').split('-')[1]; $('#vacio').remove(); //NUEVO VACIO $('.fila_'+nuevaFilaVacia).children('.columna_'+nuevaColumnaVacia).append('<div class=""></div>'); $('.fila_'+nuevaFilaVacia).children('.columna_'+nuevaColumnaVacia).children().attr('id','vacio'); $('#vacio').css('background-color', $('#vacio').parent().css('background-color') ); $('.moverDerecha').each(function(){ var f = getFila( $(this) ); var c = getColumna( $(this) ) ; c++; spawnFicha( f , c ); }); $('.moverIzquierda').each(function(){ var f = getFila( $(this) ); var c = getColumna( $(this) ) ; c--; spawnFicha( f , c ); }); $('.moverArriba').each(function(){ var f = getFila( $(this) ); f--; var c = getColumna( $(this) ) ; spawnFicha( f , c ); }); $('.moverAbajo').each(function(){ var f = getFila( $(this) ); f++; var c = getColumna( $(this) ) ; spawnFicha( f , c ); }); $('.moverDerecha').remove(); $('.moverIzquierda').remove(); $('.moverArriba').remove(); $('.moverAbajo').remove(); } $('body').on('webkitAnimationEnd animationend', '.ficha', listener); }); //ready jquery
#grilla-borde { //background-color: #CCBBBB; background-color: #BBADA0; display: block; margin: 0 auto; text-align:center; position: relative; border-radius: 5%; z-index: 1; } #grilla-interna { //background-color: #009900; background-color: #BBADA0; position: absolute; z-index: 2; } .filas { //background-color: #00AA00; background-color: #BBADA0; z-index: 3; } .celdas { //background-color: #00EE00; //background-color: #CDC1B4; border-radius: 5%; float: left; z-index: 4; } .ficha { background-color: #009900; border-radius: 5%; z-index: 5; height: 100%; width: 100%; } .moverDerecha { -webkit-animation-name: moverDerecha; -webkit-animation-duration: 0.1s; animation-name: moverDerecha; animation-duration: 0.1s; } @-webkit-keyframes moverDerecha { 0% {} 100% {margin-left: 114%;} } @keyframes moverDerecha { 0% {} 100% {margin-left: 114%;} } .moverIzquierda { -webkit-animation-name: moverIzquierda ; -webkit-animation-duration: 0.1s; animation-name: moverIzquierda ; animation-duration: 0.1s; } @-webkit-keyframes moverIzquierda { 0% {} 100% {margin-left: -114%;} } @keyframes moverIzquierda { 0% {} 100% {margin-left: -114%;} } .moverArriba { -webkit-animation-name: moverArriba ; -webkit-animation-duration: 0.1s; animation-name: moverArriba ; animation-duration: 0.1s; } @-webkit-keyframes moverArriba { 0% {} 100% {margin-top: -114%;} } @keyframes moverArriba { 0% {} 100% {margin-top: -114%;} } .moverAbajo { -webkit-animation-name: moverAbajo ; -webkit-animation-duration: 0.1s; animation-name: moverAbajo ; animation-duration: 0.1s; } @-webkit-keyframes moverAbajo { 0% {} 100% {margin-top: 114%;} } @keyframes moverAbajo { 0% {} 100% {margin-top: 114%;} }