Spostare oggetti del DOM in JS

L’esercizio si propone di realizzare una piccola interfaccia con quattro bottoni che spostano un piccolo contenitore rettangolare o lo nascondano o mostrano nel DOM della nostra pagina

Un esempio di realizzazione

La pagina HTML è alquanto scarna, giusto un blocco colorato da spostare e i pulsanti. E’ realizzata integrando la libreria Bootstrap ma non è ovviamente necessario se non ai fine estetici.

<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
    <script src="js/script.js"></script>
    <link href="css/stile.css" rel="stylesheet">
    <title>Conta maggiori/minori</title>
  </head>
  <body>
  
  <div class="container">
    <h1>Sposta oggetti e nascondi</h1> 

    <br>

    <div id="blocco"></div>

    <br><br><br><br><br><br>

    <button class="btn btn-primary" onclick="destra()">Vai a destra</button>&nbsp;
    <button class="btn btn-primary" onclick="sinistra()">Vai a sinistra</button>&nbsp;
    <button class="btn btn-danger" onclick="nascondi()">Nascondi</button>&nbsp;
    <button class="btn btn-warning" onclick="mostra()">Mostra</button>
  
</div>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
  </body>
</html>

Il listato JavaScript non è complesso ma merita un approfondimento: la prima cosa da fare è prelevare la posizione con l’attributo offsetleft. A questo punto spostare l’oggetto non è difficile con l’attributo CSS a cui assegniamo la posizione iniziale più un certo numero di pixel, qui ad esempio 50px.

Analogamente, sfruttiamo un attributo dello stile CSS per nascondere e mostrare il blocco.

function destra()
{
    let objBlocco = document.getElementById("blocco");

    let posizioneBlocco = objBlocco.offsetLeft;

    objBlocco.style.left = posizioneBlocco + 50 + "px";

}

function sinistra()
{
    let objBlocco = document.getElementById("blocco");

    let posizioneBlocco = objBlocco.offsetLeft;

    objBlocco.style.left = posizioneBlocco - 50 + "px";

}

function nascondi()
{
    let objBlocco = document.getElementById("blocco");

    objBlocco.style.display = "none";
 
}

function mostra()
{
    let objBlocco = document.getElementById("blocco");

    objBlocco.style.display = "block";
 
}

Per completezza il CSS utilizzato è il seguente. Contiene solo il codice per disegnare un semplice rettangolo. Ricorda che altezza e larghezza sono spesso attributi molto importanti per la disposizione di oggetti e il loro eventuale contenuto.

#blocco
{
    position: absolute;
    width: 200px;
    height: 50px;
    background-color: blueviolet;
    border: 2px dotted black;
}

Codice completo su GitHub -> https://github.com/alfredocentinaro/esercizi-js/tree/main/muovi-oggetti

Provalo su Replit -> https://replit.com/@AlfredoCentina2/muovi-oggetti

Ultima modifica 26 Ottobre 2022