JavaScript - Averiguar alto de un div que se genera dinámicamente

 
Vista:
sin imagen de perfil

Averiguar alto de un div que se genera dinámicamente

Publicado por Carlos (9 intervenciones) el 02/02/2017 21:42:37
Hola a todos, ando con una duda que no consigo resolver y a ver si alguien por aquí me puede echar una mano.

Tengo una imagen que al pinchar sobre ella genera un div con la clase .expanded y me gustaría saber como averiguar el alto que tiene este div (ya que varía según el contenido que tenga dentro) para guardarlo en una variable y poder realizar luego un simple cálculo aritmético.

Utilizando la forma de siempre no me funciona porque cuando se carga la página ese div no existe obviamente por lo que si pongo

1
alto = $('.expanded').height();

no me devuelve nada.

¿Cómo puedo hacer para ejecutar el script una vez que se ha generado el div para así averiguar el alto que tiene?

Perdón si la pregunta es muy tonta, es que no controlo mucho de JS

Muchas gracias de antemano

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 477
Bronce
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Averiguar alto de un div que se genera dinámicamente

Publicado por Alejandro (130 intervenciones) el 03/02/2017 01:28:04
Hola Carlos. prueba con esto

1
2
3
4
$(document).ready(function(){
    var alto = $('.expanded').height();
    console.log(alto);
 });

El método ready del objeto document permite ejecutar el código dentro de la función una vez que el el DOM a sido cargado.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Averiguar alto de un div que se genera dinámicamente

Publicado por Carlos (9 intervenciones) el 03/02/2017 15:50:20
Hola Alejandro, muchísimas gracias por responder.

He intentado lo que me dice pero no consigo que me muestre ningún valor. No se si es porque al leer la función, el div con la clase .expanded aún no existe. He añadido esta otro linea de código para que me muestre el valor una vez se crea y despliega el div pero no me aparece nada.

Lo tengo puesto tal cual al final de mi página justo antes de cerrar el <body>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script type="text/javascript">
 
$(document).ready(function($){
 
	var alto1 = $('.imagewrap').height();
	document.getElementById('altoImagewrap').innerHTML = alto1;
 
	var alto2 = $('.expanded').height();
        console.log(alto2);
        document.getElementById('altoExpanded').innerHTML = alto2;
 
 
});
</script>

Como ves ahora mismo tengo dos variables, alto1 y alto2. Lo hecho para hacer comprobaciones.

Alto1 recoge el alto de otro div con la clase .imagewrap. Este es un div normal y corriente que tiene una image de 250x250px y que esta siempre presente en la ventana. Al pinchar sobre la imagen, se genera el div que comentaba anteriormente con clase .expanded que es el que tiene más información. He colocado dos div más con id altoImagewrap y altoExpanded para mostrar los valores y ver si me devuelve algo.

altoImagewrap funciona correctamente y muestra 250 cuando recargo la página y altoExpanded, obviamente, no muestra nada por que el div.expanded no existe en ese momento ya que no he hecho click en la imagen, pero cuando pincho en la imagen y se genera este div.expanded el div con id altoExpanded sigue sin mostrar el valor de alto2 que debería ser el alto de este nuevo div generado dinámicamente.

No sé si estoy haciendo algo mal o me estoy olvidando de algo. Espero me pueda ayudar con esto, le estaría muy agradecido.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 477
Bronce
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Averiguar alto de un div que se genera dinámicamente

Publicado por Alejandro (130 intervenciones) el 04/02/2017 01:07:59
Hola Carlos, para hacer lo que tu quieres debes colocar el siguiente código:

1
2
3
4
5
$(document).ready(function($){
	$('.imagewrap').on('click', fuction() {
                var alto2 = $('.expanded').height();
         }
});

De esta manera quedas escuchando el evento click sobre el elemento .imagewrap, por lo tanto al cargar el documento se agrega el manejador de eventos sobre la imagen y al hacer click sobre esta debería mostrarte la altura.

Prueba con esto y nos comentas.
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Averiguar alto de un div que se genera dinámicamente

Publicado por Carlos (9 intervenciones) el 08/02/2017 17:51:48
Hola de nuevo, Alejandro.

Disculpe que haya tardado en contestarle, pero no he podido probar su ejemplo hasta hoy mismo. Funciona perfectamente y le agradezco mucho su ayuda. El evento click la verdad que me ha ayudado a conseguir lo que estaba buscando.

Voy a aprovecharme de su amabilidad para realizarle otra consulta. A ver si consigo explicarme.Voy a adjuntar algunas imágenes que espero ayuden;

Todo este ejemplo es para montar una rejilla de imágenes Como le comentaba, al pinchar en cada imagen se despliega un div con mayor información. A la vez que se despliega este div (.expanded) también se coloca otro div (.workactive) sobre la imagen en la que hacemos click con el mismo ancho y alto que esta, para mostrar que imagen está activa.

Gracias a su ayuda he podido hacer esto mediante el evento click, pero me surge un problema y es que, como todas las imágenes llevan esa clase .workactive, da igual en que imagen se haga click ya que muestra el elemento .workactive sobre todas las imágenes como ve en las imágenes que adjunto.

El código que tengo es

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$('.imagewrap').on('click', function() {  // Al hacer click sobre la imagen se ejecuta lo que viene abajo
 
		$('.workhover').css({display: 'none'}); // se esconde la imagen original sobre la que hacemos hover 
		$('.workactive').css({display: 'block'}); //se muestra una imagen un poco distinta para diferenciarla del resto que hay en la pantalla
 });
 
$('.close').on('click', function() { // Aquí el evento es para cerrar el div y también para hacer lo contrario de antes
 
		$('.workhover').css({display: 'block'}); // se vuelve a mostrar la imagen original
		$('.workactive').css({display: 'none'}); // se oculta la imagen que muestra la imagen activa dejándolo todo como al principio.
 });
 
// Esto es lo mismo que el elemento cerrar. Si hacemos de nuevo click sobre la imagen activa también se cierra el div y se vuelve a esconde una y mostrar la original volviendo al principio.
 
$('.workactive').on('click', function() {
 
		$('.workhover').css({display: 'block'});
		$('.workactive').css({display: 'none'});
});

Obviamente intento que estos eventos solo afecten a la imagen sobre la que hago click y no en todas a la vez. He estado leyendo que a lo mejor con el valor this puedo ejecutar esto pero la verdad que no acabo de controlar su funcionamiento. Se le ocurre alguna idea de como podría solucionar este problema.

Desde ya muchas gracias por su tiempo y ayuda.

Un saludo



rejilla
rejillaDespliegue
rejillaHover
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 477
Bronce
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Averiguar alto de un div que se genera dinámicamente

Publicado por Alejandro (130 intervenciones) el 08/02/2017 23:57:19
Hola Carlos, si puedes compartirme el código html sería de ayuda. solo la parte de la rejilla,
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Averiguar alto de un div que se genera dinámicamente

Publicado por Carlos (9 intervenciones) el 09/02/2017 12:19:47
Hola de nuevo, Alejandro.

El código HTML, donde se encuentra la rejilla, está dentro de la etiqueta <main>.
Dentro de <main> tengo un <div> con clase .portfolio (entre otras) que actúa de contenedor. Dentro de este <div> hay otro <div> con clase .filters, para poder filtrar el contenido y luego un <ul> que sería el contenedor de la rejilla en sí. Cada elemento de la rejilla es un <li>.

Le explico esto a modo de pequeña introducción. La rejilla en sí es básicamente el <ul>. Verá que ahora mismo hay mucho contenido duplicado que estoy utilizando para hacer las pruebas antes de poner el contenido final.
Cada <li> (ocho en total) contiene lo mismo y sólo cambia en el #id que tiene y que sirve para indicar que contenido hay que desplegar.

He intentado pegar aquí el código que me pedía y es demasiado largo, por lo que he conseguido colgar todas las pruebas en un servidor prestado donde usted lo puede ver. Espero que con esto pueda chequear lo que necesita.

http://neuryvas.com/pruebas/

Le agradezco la ayuda, como siempre.

Un afectuoso saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 477
Bronce
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Averiguar alto de un div que se genera dinámicamente

Publicado por Alejandro (130 intervenciones) el 10/02/2017 01:33:17
Hola Carlos, ahora mirando tu codigo logre entender mejor el problema. Hice un codigo javascript que puede lo solucione:

JAVASCRIPT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// El objeto $(this), permite hacer referencia al elemento que desencadeno el evento, es decir, el div
// con la clase imagewrap  sobre el que se hizo clic. 
$(document).ready(function() {
	$('.imagewrap').on('click', function() {
		if ($(this).hasClass('active')) {
			$(this).removeClass('active'); // desactivo la imagen actual
		} else {
			$('.imagewrap').removeClass('active'); // desactivo todas las imágenes
			$(this).addClass('active');
		}
	});
 
	$('.close').on('click', function() {
		$('.imagewrap').removeClass('active');
	});
});

Para hacer el código mas limpio he agregado la clase active al .imagewrap de esta manera cuando este tenga la clase se muestra el workactive y se oculta el workhover de lo contrario se muestra este ultimo y se oculta el primero. Así que agrega a tu hoja de estilos las siguientes lineas.

CSS
1
2
3
4
5
6
7
8
9
10
.imagewrap.active .workhover {
	display: none;
}
.imagewrap.active .workactive {
	display: block;
}
.imagewrap.active .workactive .workinfo {
	display: block;
	opacity: 1;
}


Comentanos si te sirvio. Suerte.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Averiguar alto de un div que se genera dinámicamente

Publicado por Carlos (9 intervenciones) el 10/02/2017 20:44:50
Hola Alejandro,

Muchas gracias una vez más por su ayuda, estoy aprendiendo a entender como funcionan algunos eventos de JS gracias a usted. Ha sido culpa mía, ya que le he ido indicando que todo sucedía a partir de la clase .imagewrap cuando no era así. Ahora ya he hecho los ajustes necesarios y he conseguido que su código funcione a las mil maravillas bajo dicha clase. Voy a terminar de ajustar algunas cosas que no terminan de funcionar bien cuando despliego el div.

En el primer mensaje que puse aquí quería averiguar el alto que tenía un div que se genera dinámicamente para así poder controlar los elementos de navegación que hay dentro de éste, concretamente el botón cerrar y los botones siguiente y anterior, para que se situaran en un lugar concreto dentro del div al desplegarse con absolute, cambiarlos a fixed cuando hago scroll y volver a colocarlos en absolute antes de que se salgan del div.expanded. Lo tenía todo controlado cuando tenía una fila de imágenes pero cuando he añadido más imágenes los cálculos aritméticos que he hecho parecen no funcionar, así que tengo que reajustrarlos porque "bailan" a su antojo. También he de ajustar los botones anterior y siguiente, ya que, funcionan y cambian al siguiente contenido, pero el thumbnail activo queda en el que se hizo click en primera instancia y no al contenido que se está mostrando. Puede ver a lo que me refiero en ambos casos en el mismo enlace que le facilité ayer

http://neuryvas.com/pruebas/

Reciba un cordial saludo.

Carlos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar