Escala fija y pantalla completa en aplicaciones React

Para implementar una visualización responsiva en pantallas grandes con escala de relación fija y funcionalidad de pantalla completa en React, se puede combinar el uso de la Fullscreen API con transformaciones CSS. A continuación, se describe un enfoque modular y optimizado.

1. Módulo de gestión de pantalla completa en JavaScript

Se crea un módulo que encapsula la lógica para activar y desactivar el modo de pantalla completa, manejando las diferencias entre navegadores.

// fullscreenManager.js
const toggleFullscreen = (activate) => {
  const doc = document;
  const docEl = doc.documentElement;
  
  if (activate) {
    const requestMethod = docEl.requestFullscreen || 
                          docEl.webkitRequestFullscreen || 
                          docEl.mozRequestFullScreen || 
                          docEl.msRequestFullscreen;
    if (requestMethod) {
      requestMethod.call(docEl);
    } else if (typeof window.ActiveXObject !== 'undefined') {
      const wscript = new ActiveXObject('WScript.Shell');
      if (wscript) {
        wscript.SendKeys('{F11}');
      }
    }
  } else {
    const exitMethod = doc.exitFullscreen || 
                       doc.webkitExitFullscreen || 
                       doc.mozCancelFullScreen || 
                       doc.msExitFullscreen;
    if (exitMethod) {
      exitMethod.call(doc);
    } else if (typeof window.ActiveXObject !== 'undefined') {
      const wscript = new ActiveXObject('WScript.Shell');
      if (wscript) {
        wscript.SendKeys('{F11}');
      }
    }
  }
};

const checkFullscreenStatus = () => {
  const screenHeight = window.screen.height;
  const clientHeight = document.documentElement.clientHeight;
  // Umbral para considerar pantalla completa
  return (screenHeight - clientHeight) <= 20;
};

export { toggleFullscreen, checkFullscreenStatus };

2. Componente React con escala fija y eventos de pantalla completa

En el componente React, se calcula el factor de escala basado en una resolución de diseño fija (por ejemplo, 1920x1080) y se ajusta automáticamente al redimensionar la ventana.

import React, { useState, useEffect, useCallback } from 'react';
import { toggleFullscreen, checkFullscreenStatus } from './fullscreenManager';

const LargeScreenDisplay = ({ children }) => {
  const [zoomFactor, setZoomFactor] = useState(1);

  const updateScale = useCallback(() => {
    const viewportWidth = window.innerWidth || document.documentElement.clientWidth;
    const viewportHeight = window.innerHeight || document.documentElement.clientHeight;
    
    // Resolución de diseño objetivo
    const designWidth = 1920;
    const designHeight = 1080;
    
    const widthRatio = viewportWidth / designWidth;
    const heightRatio = viewportHeight / designHeight;
    
    // Usar la menor ratio para mantener relación de aspecto
    setZoomFactor(Math.min(widthRatio, heightRatio));
  }, []);

  useEffect(() => {
    updateScale();
    window.addEventListener('resize', updateScale);
    
    return () => {
      window.removeEventListener('resize', updateScale);
    };
  }, [updateScale]);

  const handleDoubleClick = () => {
    const isFullscreen = checkFullscreenStatus();
    toggleFullscreen(!isFullscreen);
  };

  return (
    <div height:="" left="" ondoubleclick="{handleDoubleClick}" style="{{" transform:="" transformorigin:="" width:="">
      {children}
    </div>
  );
};

export default LargeScreenDisplay;

3. Consideraciones de implementación

Para un despliegue robusto, se recomienda:

  • Optimizar el cálculo de escala usando requestAnimationFrame para evitar reflows innecesarios.
  • Manejar eventos de teclado como alternativa para activar la pantalla completa.
  • Probar la compatibilidad con navegadores antiguos si es necesario, mediante polyfills específicos.

Etiquetas: React JavaScript css FullscreenAPI ResponsiveDesign

Publicado el 6-8 22:06