Dynamically image in a puzzle with javascript

1

My question is how can I put the image by javascript and in this way have dynamic images since here it is put in the css:

var select = false;
var c = "inc";
var pos_s = "";
var id_s = "";

var rompecabezas = {
  _arr_pos_r : new Array(),
  _arr_pos_a : new Array(),
  
  _mostrar: function(){
    rompecabezas._arr_pos_r.length = 0;
		var piezas = rompecabezas._get("piezas").value;
		var tb = document.createElement('table');
		tb.border = 1;
		tb.align = 'center';
		tb.cellPadding = 0;
		tb.cellSpacing = 0;
		var dp = document.createElement('div');
		dp.id = 'posiciones';
		dp.className = 'posic';
		var ar = Math.sqrt(piezas);
		var c = 0;
		var tam_img = 300;
		var pos_img = tam_img / ar;
		for(var fil=1;fil<=ar;fil++){
			var tr = document.createElement('tr');
			for(var cel=1;cel<=ar;cel++){
				c++;
				var td = document.createElement('td');
				td.className = 'pieza';
				td.id = 'pos_'+c;
				td.style.width = pos_img+'px';
				td.style.height = pos_img+'px';
				var dbp = document.createElement('div');
				dbp.id = 'val_bp_'+c;
				var p = Math.round(((pos_img*cel)-pos_img) * -1)+'px '+Math.round(((fil * pos_img)-pos_img) * -1)+'px';
				td.style.backgroundPosition = p;
				rompecabezas._arr_pos_r.push(p);
				dbp.innerHTML = p;
				dp.appendChild(dbp);
				td.onclick = function(){
					rompecabezas._cambiaBGP(this.id);
					rompecabezas._compruebaFin();
				}
				tr.appendChild(td);
			}
			tb.appendChild(tr);
		}
		if(!rompecabezas._get("div_content")){
			var cont = document.createElement('div');
			cont.id = 'div_content';
			cont.appendChild(tb);
			cont.appendChild(dp);
			document.body.appendChild(cont);
		}else{
			rompecabezas._get("div_content").innerHTML = '';
			rompecabezas._get("div_content").appendChild(tb);
			rompecabezas._get("div_content").appendChild(dp);
			rompecabezas._get("posiciones").removeClass('posic');
			rompecabezas._get("posiciones").innerHTML = '';
			rompecabezas._get("posiciones").className = 'posic';
		}
	},
	
	_barajar: function(){
		var num_alt = null;
		var arr = new Array();
		var resp = "no";
		var i = -1;
		var repite = "no";
		var pie = parseInt(rompecabezas._get("piezas").value);
		var pie1 = pie + 1;
		while(arr.length < pie){
			repite = "no";
			num_alt = Math.floor(Math.random()*pie1);
			if(num_alt != 0){
				if(arr.length == 0){
					i++;
					arr[i] = num_alt;
				}else{
					for(j=0;j<=arr.length-1;j++){
						if(arr[j] == num_alt){
							repite = "si";
						}
					}
					if(repite != "si"){
						i++;
						arr[i] = num_alt;
					}
				}
			}
		}
	
		var id = 0;	
		for(k=0; k<=arr.length-1;k++){
			id = k-(-1);
			rompecabezas._get("pos_"+id).style.backgroundPosition = rompecabezas._get("val_bp_"+arr[k]).innerHTML;
		}
	},
	
	_cambiaBGP: function(id){
		if(select == false){
			pos_s = rompecabezas._get(id).style.backgroundPosition;
			id_s = id;
			select = true;
      rompecabezas._get(id_s).style.boxShadow = '1px 1px 14px #FFF,-1px -1px 14px #FFF, 1px -1px 14px #FFF,-1px 1px 14px #FFF';
		}else{
			var pos_n =  rompecabezas._get(id).style.backgroundPosition;
			var id_n = id;
			c = "com";
			select = false;
		}
	 
		if(c == "com"){ rompecabezas._get(id_n).style.backgroundPosition = pos_s; rompecabezas._get(id_s).style.backgroundPosition = pos_n;
			c = "inc";
      rompecabezas._get(id_s).style.boxShadow = '';
		}
	},
	
	_compruebaFin: function(){
		var pie = parseInt(rompecabezas._get("piezas").value);
		var fin = false;
		rompecabezas._arr_pos_a.length = 0;
		for(var i=1;i<=pie;i++){
			rompecabezas._arr_pos_a.push(rompecabezas._get("pos_"+i).style.backgroundPosition);
		}
		for(var j=0;j<rompecabezas._arr_pos_r.length;j++){
			if(rompecabezas._arr_pos_r[j] != rompecabezas._arr_pos_a[j]){
				fin = false;
				break;
			}else{
				fin = true;
			}
		}
		
    setTimeout(function(){
      if(fin){
			  alert("LO RESOLVISTE COMPADRE!!")
		  }
    },600);
	},
	
	_get: function(id){
		return document.getElementById(id);
	}
};


window.onload = function(){
	rompecabezas._mostrar();
  rompecabezas._barajar();
  rompecabezas._get("piezas").onchange = function(){
    rompecabezas._mostrar();
  }
    rompecabezas._get("barajar").onclick = function(){
      rompecabezas._barajar();
    }
}
body{background:#222; margin:0; padding:0; font-family:Helvetica;}

span{color:#FFF;}

div#content{margin-top:10px;}

div#conf{padding-bottom:10px;}

table{border:2px solid green; box-shadow:1px 1px 8px #00e800,-1px -1px 8px #00e800, 1px -1px 8px #00e800, -1px 1px 8px #00e800; -webkit-box-shadow:1px 1px 8px #00e800,-1px -1px 8px #00e800, 1px -1px 8px #00e800, -1px 1px 8px #00e800; border-collapse:collapse;}

td.pieza{background:url(http://images6.fanpop.com/image/polls/1263000/1263106_1376304773845_full.jpg); transition:.3s ease-in-out; -moz-transition:.3s ease-in-out; -webkit-transition:.3s ease-in-out; -o-transition:.3s ease-in-out; cursor:pointer;}

div.posic{padding:5px;  width:150px; position:absolute; top:70px; overflow:auto; min-height:200px; max-height:250px}

div#titulo{color:#FFF; font-size:30px; font-weight:bold; text-shadow:1px 1px 8px #00e800, -1px -1px 8px #00e800, 1px -1px 8px #00e800, -1px 1px 8px #00e800;}
<body>
  <div id='content' align='center'>
    <div id="titulo">Bin ROMPECABEZAS</div>
  	<div id='conf'>
			<span>Nro de piezas:</span>
			<select id='piezas'>
        <option value='4'>4</option>
				<option value='9'>9</option>
				<option value='16'>16</option>
				<option value='25'>25</option>
				<option value='36'>36</option>
				<option value='0' disabled>..</option>
				<option value='0' disabled>..</option>
				<option value='100'>100</option>
			</select><input type='button' id='barajar' value='Barajar' />
      <div><span>Pulsa en un cuadro y luego en otro para intercambiar sus posiciones!!</span></div>
		</div>
	</div>
</body>
    
asked by Ivan More Flores 28.09.2017 в 21:31
source

1 answer

2

PS: Change the image you had originally because I'm at work and I have limited access to images.

In the Javascript comment the part of putting the image.

var select = false;
var c = "inc";
var pos_s = "";
var id_s = "";

var rompecabezas = {
  _arr_pos_r: new Array(),
  _arr_pos_a: new Array(),

  _mostrar: function() {
    rompecabezas._arr_pos_r.length = 0;
    var piezas = rompecabezas._get("piezas").value;
    var tb = document.createElement('table');
    tb.border = 1;
    tb.align = 'center';
    tb.cellPadding = 0;
    tb.cellSpacing = 0;
    var dp = document.createElement('div');
    dp.id = 'posiciones';
    dp.className = 'posic';
    var ar = Math.sqrt(piezas);
    var c = 0;
    var tam_img = 300;
    var pos_img = tam_img / ar;
    for (var fil = 1; fil <= ar; fil++) {
      var tr = document.createElement('tr');
      for (var cel = 1; cel <= ar; cel++) {
        c++;
        //Se crea el td de la tabla, se le pone clase llamada pieza
        var td = document.createElement('td');
        td.className = 'pieza';
        td.id = 'pos_' + c;
        td.style.width = pos_img + 'px';
        td.style.height = pos_img + 'px';



        //al td creado anteriormete aqui ponemos la imagen
        td.style.backgroundImage = "url('   https://cdn.pixabay.com/photo/2016/02/05/17/44/jigsaw-1181623_960_720.png')";
        
        
        

        var dbp = document.createElement('div');
        dbp.id = 'val_bp_' + c;
        var p = Math.round(((pos_img * cel) - pos_img) * -1) + 'px ' + Math.round(((fil * pos_img) - pos_img) * -1) + 'px';
        td.style.backgroundPosition = p;
        rompecabezas._arr_pos_r.push(p);
        dbp.innerHTML = p;
        dp.appendChild(dbp);
        td.onclick = function() {
          rompecabezas._cambiaBGP(this.id);
          rompecabezas._compruebaFin();
        }
        tr.appendChild(td);
      }
      tb.appendChild(tr);
    }
    if (!rompecabezas._get("div_content")) {
      var cont = document.createElement('div');
      cont.id = 'div_content';
      cont.appendChild(tb);
      cont.appendChild(dp);
      document.body.appendChild(cont);
    } else {
      rompecabezas._get("div_content").innerHTML = '';
      rompecabezas._get("div_content").appendChild(tb);
      rompecabezas._get("div_content").appendChild(dp);
      rompecabezas._get("posiciones").removeClass('posic');
      rompecabezas._get("posiciones").innerHTML = '';
      rompecabezas._get("posiciones").className = 'posic';
    }
  },

  _barajar: function() {
    var num_alt = null;
    var arr = new Array();
    var resp = "no";
    var i = -1;
    var repite = "no";
    var pie = parseInt(rompecabezas._get("piezas").value);
    var pie1 = pie + 1;
    while (arr.length < pie) {
      repite = "no";
      num_alt = Math.floor(Math.random() * pie1);
      if (num_alt != 0) {
        if (arr.length == 0) {
          i++;
          arr[i] = num_alt;
        } else {
          for (j = 0; j <= arr.length - 1; j++) {
            if (arr[j] == num_alt) {
              repite = "si";
            }
          }
          if (repite != "si") {
            i++;
            arr[i] = num_alt;
          }
        }
      }
    }

    var id = 0;
    for (k = 0; k <= arr.length - 1; k++) {
      id = k - (-1);
      rompecabezas._get("pos_" + id).style.backgroundPosition = rompecabezas._get("val_bp_" + arr[k]).innerHTML;
    }
  },

  _cambiaBGP: function(id) {
    if (select == false) {
      pos_s = rompecabezas._get(id).style.backgroundPosition;
      id_s = id;
      select = true;
      rompecabezas._get(id_s).style.boxShadow = '1px 1px 14px #FFF,-1px -1px 14px #FFF, 1px -1px 14px #FFF,-1px 1px 14px #FFF';
    } else {
      var pos_n = rompecabezas._get(id).style.backgroundPosition;
      var id_n = id;
      c = "com";
      select = false;
    }

    if (c == "com") {
      rompecabezas._get(id_n).style.backgroundPosition = pos_s;
      rompecabezas._get(id_s).style.backgroundPosition = pos_n;
      c = "inc";
      rompecabezas._get(id_s).style.boxShadow = '';
    }
  },

  _compruebaFin: function() {
    var pie = parseInt(rompecabezas._get("piezas").value);
    var fin = false;
    rompecabezas._arr_pos_a.length = 0;
    for (var i = 1; i <= pie; i++) {
      rompecabezas._arr_pos_a.push(rompecabezas._get("pos_" + i).style.backgroundPosition);
    }
    for (var j = 0; j < rompecabezas._arr_pos_r.length; j++) {
      if (rompecabezas._arr_pos_r[j] != rompecabezas._arr_pos_a[j]) {
        fin = false;
        break;
      } else {
        fin = true;
      }
    }

    setTimeout(function() {
      if (fin) {
        alert("LO RESOLVISTE COMPADRE!!")
      }
    }, 600);
  },

  _get: function(id) {
    return document.getElementById(id);
  }
};


window.onload = function() {
  rompecabezas._mostrar();
  rompecabezas._barajar();
  rompecabezas._get("piezas").onchange = function() {
    rompecabezas._mostrar();
  }
  rompecabezas._get("barajar").onclick = function() {
    rompecabezas._barajar();
  }
}
body {
  background: #222;
  margin: 0;
  padding: 0;
  font-family: Helvetica;
}

span {
  color: #FFF;
}

div#content {
  margin-top: 10px;
}

div#conf {
  padding-bottom: 10px;
}

table {
  border: 2px solid green;
  box-shadow: 1px 1px 8px #00e800, -1px -1px 8px #00e800, 1px -1px 8px #00e800, -1px 1px 8px #00e800;
  -webkit-box-shadow: 1px 1px 8px #00e800, -1px -1px 8px #00e800, 1px -1px 8px #00e800, -1px 1px 8px #00e800;
  border-collapse: collapse;
}

td.pieza {
  background: url();
  transition: .3s ease-in-out;
  -moz-transition: .3s ease-in-out;
  -webkit-transition: .3s ease-in-out;
  -o-transition: .3s ease-in-out;
  cursor: pointer;
}

div.posic {
  padding: 5px;
  width: 150px;
  position: absolute;
  top: 70px;
  overflow: auto;
  min-height: 200px;
  max-height: 250px
}

div#titulo {
  color: #FFF;
  font-size: 30px;
  font-weight: bold;
  text-shadow: 1px 1px 8px #00e800, -1px -1px 8px #00e800, 1px -1px 8px #00e800, -1px 1px 8px #00e800;
}
<body>
  <div id='content' align='center'>
    <div id="titulo">Bin ROMPECABEZAS</div>
    <div id='conf'>
      <span>Nro de piezas:</span>
      <select id='piezas'>
        <option value='4'>4</option>
				<option value='9'>9</option>
				<option value='16'>16</option>
				<option value='25'>25</option>
				<option value='36'>36</option>
				<option value='0' disabled>..</option>
				<option value='0' disabled>..</option>
				<option value='100'>100</option>
			</select><input type='button' id='barajar' value='Barajar' />
      <div><span>Pulsa en un cuadro y luego en otro para intercambiar sus posiciones!!</span></div>
    </div>
  </div>
</body>
    
answered by 28.09.2017 / 22:18
source