¿Cómo cargar archivos CSS y JS dinámicamente?

Generalmente, los archivos CSS y JS se incluyen de forma estática con código HTML. Significa que están escritos en el script o en la etiqueta del enlace en el   código HTML . Pero esto ralentiza la ejecución ya que una gran cantidad de código se carga innecesariamente. Puede o no usar la funcionalidad relacionada con ese elemento DOM . De manera dinámica, cargamos los archivos CSS y JS durante el tiempo de ejecución cuando necesitamos su funcionalidad.

Cargue archivos CSS y JS dinámicamente: creamos un elemento de secuencia de comandos para el archivo JS y un elemento de enlace para el archivo CSS según sea necesario usando DOM, les asignamos los atributos apropiados y luego agregamos el elemento a la ubicación deseada dentro del árbol del documento usando el elemento.append()método.

Veamos en detalle todo el proceso a través de un pequeño proyecto, paso a paso.

Paso 1: Cree un archivo index.html y un archivo app.js. Este sería nuestro archivo HTML a través del cual demostraremos la carga dinámica de archivos JS y CSS. El archivo app.jscontendría la funcionalidad para llamar dinámicamente a la carga de los archivos. Lo agregaríamos estáticamente en nuestro archivo HTML. 

En nuestro archivo HTML, hemos creado dos divs dentro de un div HTML . El div HTML superior contiene un encabezado y un botón para mostrar mensajes. La funcionalidad para mostrar mensajes se agregaría dinámicamente. Inicialmente, el botón no funcionaría. En el div inferior , tenemos dos botones, uno para cargar el archivo CSS y otro para el archivo JS de forma dinámica. Las funciones onClick para estos botones se definen en el archivo  app.js.

Estructura del archivo:

File Stucture

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible"
          content="IE=edge">
    <meta name="viewport" 
          content="width=device-width, initial-scale=1.0">
    <title>Dynamic</title>
    
     <!-- the static loading of app.js file-->
    <script src="app.js"></script>
</head>
<body>
      
    <div>
        <div id="upper">
            
            <!-- The message will change on successful
                 execution of View button-->
            <h3 id="mssg">
               We are here to learn how to load
               CSS and JS file dynamically
            </h3>
  
            <!-- The message() function is in script.js file -->
            <button onclick="message()"> View Message </button>
        </div>
        <br>
        
        <!-- This div would disappear after view 
             message is successfully executed-->
        <div id="lower">  
            
            <!-- The loadCSS would load the styles.css file -->
            <button onclick="loadCSS()">
              Load CSS 
            </button>
  
            <!-- The loadJS would load the script.js file-->
            <button onclick="loadJS()">
              Load JS 
            </button>            
        </div>
    </div>
</body>
</html>

En el archivo app.js , tenemos dos funciones loadJS() y loadCSS() que son atributos onClick de los dos botones definidos en el div HTML inferior en el archivo HTML. 

Para la carga dinámica de archivos,

La implementación práctica de los pasos anteriores se muestra a continuación en el código. También usamos el método de string indexOf() para verificar que no agregamos repetidamente el mismo archivo al hacer clic varias veces en el botón.

app.js

// The string stores the name of files added till now
var filesAdded = ''; 
  
// For loading JS file
function loadJS(){ 
  
    // Gives -1 when the given input is not in the string
    // i.e this file has not been added
      
    if(filesAdded.indexOf('script.js') !== -1)
        return
          
    // Head tag
    var head = document.getElementsByTagName('head')[0] 
      
    // Creating script element
    var script = document.createElement('script') 
    script.src = 'script.js'
    script.type = 'text/javascript'
      
    // Adding script element
    head.append(script) 
      
     // Adding the name of the file to keep record
    filesAdded += ' script.js'
}
  
// To load CSS file
function loadCSS() { 
  
    if(filesAdded.indexOf('styles.css') !== -1)
        return
  
    var head = document.getElementsByTagName('head')[0]
      
    // Creating link element
    var style = document.createElement('link') 
    style.href = 'styles.css'
    style.type = 'text/css'
    style.rel = 'stylesheet'
    head.append(style);
      
    // Adding the name of the file to keep record
    filesAdded += ' styles.css' 
}

Paso 2: ahora cree un archivo styles.css , que se cargará dinámicamente. Este archivo contiene el código para proporcionar border , margin, padding y background-color a los dos divs HTML por separado usando sus id.

styles.css

#upper{
    border: 2px solid red;
    margin: 10px;
    padding: 15px;
    background-color: aqua;
    align-items: center;
}
  
#lower{
    border: 2px solid green;
    margin: 10px;
    padding: 15px;
    background-color: greenyellow;
    align-items: center;
}

Paso 3: ahora crearíamos un archivo script.js que mostraría un mensaje editando el elemento h3 al hacer clic en el botón Ver mensaje y desaparecer el div inferior o cambiar su propiedad de visualización a none . Este archivo JS se cargaría dinámicamente.

script.js

function message() {
  
    // Get the h3 element
    var h3 = document.getElementById('mssg') 
  
    // Changed it's text, colour
    h3.innerText = 'CONGRATS!! You have learnt' 
    h3.style.color = 'red' 
      
    // Get the lower div
    var div = document.getElementById('lower')
  
    // Disappear mode
    div.style.display = 'none' 
}

Paso 4: ahora copie la ruta completa del archivo index.html y cárguelo en su navegador. Inicialmente, el botón etiquetado Ver mensaje daría el error. Cuando haga clic en el botón cargar CSS , aparecerá el estilo y después de hacer clic en el botón cargar JS , el botón Ver mensaje se volverá funcional.

Producción:

Entonces, así es como puede manejar la carga dinámica de archivos usando DOM Manipulation. Es muy útil ya que aumenta la velocidad y aporta robustez.

Publicación traducida automáticamente

Artículo escrito por devrajkumar1903 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *