Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

155
Vistas
JavaScript No obtiene un valor actualizado cuando usa screen.width o screen.availWidth en una función a la que llama setInterval

Comportamiento esperado:

  1. setInterval llama a getScreenWidth() cada 2 segundos.
  2. getScreenWidth() obtiene el ancho actual de la pantalla (navegador).
  3. El ancho se registra en la consola.
  4. Cambiamos el ancho de la pantalla, haciendo clic en el botón 'Restaurar abajo' (junto a Minimizar) y luego modificando con el puntero del mouse.
  5. Vemos una actualización en la salida de la consola.

Producción:

 "1536"

La salida es siempre un valor constante. (en mi caso 1536)

Estaba probando este código en CodePen, y lo intenté:

  1. Cambiar el tamaño de la ventana de salida. (cambiando su ancho)
  2. Cambiar el tamaño del navegador. (cambiando ancho e incluso alto)

El HTML:

 <div id="demo"></div>

La secuencia de comandos:

 "use strict"; console.clear(); function getScreenWidth() { return screen.availWidth; // I've also tried screen.width } const demo = document.getElementById("demo"); let count = 0; const intervalId = setInterval(function () { demo.innerHTML = getScreenWidth(); console.clear(); console.log(demo.innerHTML); console.log(count); count++; if (count > 30) { clearInterval(intervalId); } }, 2000);

Dado que setInterval está llamando indirectamente a getScreenWidth() cada 2 segundos, ¿no debería screen.width ser un valor nuevo cada vez?

Si asumo que es un valor nuevo, ¿significa que screen.width no es igual al ancho actual de la ventana del navegador?

Nota: La variable de count en el código es solo para evitar que setInterval ejecute indefinidamente en segundo plano.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Tengo el mismo ancho de pantalla :)

De todos modos, no necesita setInterval , puede cambiarlo cada vez que se cambia el tamaño del navegador usando el evento onresize de la ventana:

 window.onresize = function() { screen.width; // 1536 / 1530 etc. };

Tampoco puede obtener el ancho del navegador (con screen.width )

Pero puede obtenerlo fácilmente usando la función .width() de jQuery:

 $(window).width();

Aquí hay un ejemplo de trabajo (usando jQuery):

 "use strict"; console.clear(); function getScreenWidth() { return $(window).width(); } const demo = document.getElementById("demo"); window.onresize = function() { demo.textContent = getScreenWidth(); console.clear(); console.log(demo.textContent); };
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="demo"></div>

Editar: tampoco puede cambiar el tamaño de la ventana del navegador con JavaScript. Esto sería un gran problema de seguridad, y debería estar contento de que no sea posible.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Desde MDN :

La interfaz de pantalla representa una pantalla, generalmente aquella en la que se representa la ventana actual, y se obtiene mediante window.screen.

Por lo tanto, el objeto de pantalla aquí representa la pantalla de salida del dispositivo y no la ventana del navegador.

Nuevamente, de MDN :

La propiedad de solo lectura Screen.width devuelve el ancho de la pantalla en píxeles.

Por lo tanto, screen.width (o window.screen.width ) no nos da el ancho de la ventana del navegador, sino el ancho de la pantalla (pantalla de salida del dispositivo), que obviamente no cambiaría.

Para obtener el ancho de la ventana del navegador, necesitamos usar Element.clientWidth .

De MDN una vez más:

La propiedad Element.clientWidth es cero para elementos en línea y elementos sin CSS; de lo contrario, es el ancho interior de un elemento en píxeles. Incluye relleno pero excluye bordes, márgenes y barras de desplazamiento verticales (si están presentes).

Cuando clientWidth se usa en el elemento raíz (el elemento) (o si el documento está en modo peculiar), se devuelve el ancho de la ventana gráfica (excluyendo cualquier barra de desplazamiento).

Simplemente cambiando getScreenWidth() haría:

 function getScreenWidth() { return document.body.clientWidth; }

Ahora la salida de la consola cambia cuando cambia el ancho de la ventana del navegador.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda