Foros del Web » Programando para Internet » Javascript »

Problema con javascript. getElementById("blabla").style."algo".

Estas en el tema de Problema con javascript. getElementById("blabla").style."algo". en el foro de Javascript en Foros del Web. Buenas, me surge un problema al hacer un cambio en el css haciendo uso de js, y no entiendo el porque. El objeto que quiero ...
  #1 (permalink)  
Antiguo 29/07/2016, 09:33
 
Fecha de Ingreso: agosto-2015
Ubicación: Burgos, España
Mensajes: 17
Antigüedad: 8 años, 8 meses
Puntos: 0
Problema con javascript. getElementById("blabla").style."algo".

Buenas, me surge un problema al hacer un cambio en el css haciendo uso de js, y no entiendo el porque.

El objeto que quiero cambiar tiene este css:
#img1_1{
background-image: url("img/img1_1.png");
background-size: 200px 200px;
background-repeat: no-repeat;
width: 200px;
height: 200px;
position: absolute;
z-index: 1;
margin-left: 0px;
left: 0px;
bottom: 0%;
}

Y la función donde lo cambio:
function blablab(elemento, inicio = 0, fin = 800){
var objeto;
var aux;

objeto = document.getElementById(elemento);

objeto.style.transition = "all 1s";
objeto.style.transitionTimingFunction = "linear";

if(objeto.style.left == ""){
aux = 0;
}else{
aux = objeto.style.left;
aux = aux.substr(0,aux.length - 2);
aux = parseInt(aux);
}


if(aux >= fin){
dir = "izq";
}
if(aux <= inicio){
dir = "der";
}

if(dir == "der"){
resp = aux + 90;
} else if (dir == "izq"){
resp = aux - 90;
}

objeto.style.left = resp + "px";
}

He hecho una chapuza, para que no me diera error, que es ese:
if(objeto.style.left == ""){
aux = 0;
}else{
aux = objeto.style.left;
aux = aux.substr(0,aux.length - 2);
aux = parseInt(aux);
}

Pero no entiendo por que la primera vez, que tiene en el left del css 0px, no me lo detecta la primera pasada, pero a partir de cambiarlo con js, las siguientes si me lo detecta.

Si alguien puede ayudarme se agradecería mucho.

Soy un newbie en todo esto de js.

Un saludo.
  #2 (permalink)  
Antiguo 29/07/2016, 11:28
Avatar de PIRRUMAN  
Fecha de Ingreso: febrero-2006
Ubicación: Monterrey, Nuevo León
Mensajes: 633
Antigüedad: 18 años, 2 meses
Puntos: 53
Respuesta: Problema con javascript. getElementById("blabla").style."algo".

deberias debuguear paso a paso la funcion que lo realiza, ya se colocando alerts o usando console.log

por ejemplo:
Código Javascript:
Ver original
  1. console.log(aux);
  2. alert(fin);
  3. console.log(...etc..);
  4.  
  5. if(aux >= fin){
  6. dir = "izq";
  7. }
  8. if(aux <= inicio){
  9. dir = "der";
  10. }

para ver que es lo que lo afecta
__________________
“Prefiero ser un tonto momentaneo que un eterno ignorante”
“¡El éxito es resultado de los aciertos,los aciertos resultado de la experiencia y la experiencia resultado de los errores!”
  #3 (permalink)  
Antiguo 29/07/2016, 13:46
 
Fecha de Ingreso: agosto-2015
Ubicación: Burgos, España
Mensajes: 17
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: Problema con javascript. getElementById("blabla").style."algo".

Siempre voy debugeando con alerts, y por eso me di cuenta del error e hice ese "apaño" pero no me gusta nada.
  #4 (permalink)  
Antiguo 29/07/2016, 22:49
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: Problema con javascript. getElementById("blabla").style."algo".

Lo que sucede es que, los estilos que estableces en una hoja de estilos (o sea, solo código CSS), no se establecen en la propiedad style, por lo que, cuando quieres leer un valor de esa manera, no lo detecta. Lo aconsejable es que uses la forma elemento.style.propiedad para establecer un valor; y para leer el valor de una propiedad cualquiera, lo hicieras mediante el método .getComputedStyle():
Código Javascript:
Ver original
  1. getComputedStyle(elemento).propiedad;

En tu caso, la condición quedaría así:
Código Javascript:
Ver original
  1. if (getComputedStyle(objeto).left == ""){
  2.     //Instrucciones
  3. }

__________________
«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

Etiquetas: js
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:12.