Aprimorando o Rastreador de Finanças Pessoais

JavaScriptBeginner
Pratique Agora

Introdução

Neste Lab, a jornada de Alex através do desenvolvimento do rastreador de finanças pessoais entra em uma fase avançada, focando no aprimoramento da interatividade do aplicativo por meio de técnicas sofisticadas de tratamento de eventos. A cena se passa em uma sessão de brainstorming na startup de tecnologia, onde Alex propõe adicionar uma funcionalidade de arrastar e soltar para reordenar os registros financeiros. Este objetivo ambicioso visa fornecer aos usuários uma maneira intuitiva de organizar seus registros, refletindo a natureza fluida do gerenciamento de finanças pessoais. Alcançar isso exige que Alex explore eventos DOM avançados e manipule elementos de uma forma que seja visualmente atraente e amigável ao usuário.

Neste Lab, você mergulhará profundamente no tratamento avançado de eventos em JavaScript, aprendendo como implementar a funcionalidade de arrastar e soltar para reordenar itens dinamicamente em uma lista. Essa habilidade é inestimável para criar aplicativos web modernos e interativos que priorizam a experiência do usuário.

Pontos de Conhecimento:

  • API de Arrastar e Soltar (dragstart, dragover, drop)
Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 95%. Recebeu uma taxa de avaliações positivas de 97% dos estudantes.

DragEvent

DragEvent é uma interface de evento para lidar com operações de arrastar e soltar. Ela se estende de MouseEvent, portanto, inclui todas as propriedades do evento de mouse, além de algumas propriedades adicionais específicas para operações de arrastar e soltar.

Configurando Arrastar e Soltar

Para tornar um elemento arrastável, você precisa definir seu atributo draggable como true. Em seguida, você pode adicionar ouvintes de eventos para lidar com os eventos de arrastar e soltar.

<div id="drag-item" draggable="true">Drag me</div>

ou

setAttribute("draggable", true);

Lidando com Eventos de Arrastar e Soltar

As operações de arrastar e soltar envolvem vários eventos, incluindo dragstart, drag, dragend, dragenter, dragover, dragleave e drop.

  • dragstart: Acionado quando o usuário começa a arrastar um elemento.
  • drag: Acionado continuamente enquanto um elemento está sendo arrastado.
  • dragend: Acionado quando a operação de arrastar e soltar termina.

Por exemplo, adicionando ouvintes de eventos a um elemento:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Drag and Drop Example</title>
    <style>
      #drag-item {
        width: 100px;
        height: 100px;
        background-color: rgb(87, 196, 238);
        color: white;
        line-height: 100px;
        text-align: center;
        margin-bottom: 10px;
        cursor: pointer;
      }
      #drop-zone {
        width: 200px;
        height: 100px;
        background-color: rgb(214, 210, 210);
        line-height: 100px;
        text-align: center;
      }
    </style>
  </head>
  <body>
    <div id="drag-item" draggable="true">Drag me</div>
    <div id="drop-zone">Drop here</div>

    <script>
      const dragItem = document.getElementById("drag-item");

      dragItem.addEventListener("dragstart", function (event) {
        // Set the drag data
        event.dataTransfer.setData(
          "text/plain",
          "This is the data being dragged"
        );
      });

      dragItem.addEventListener("dragend", function (event) {
        // Operations after dragging ends
        console.log("Drag ended");
      });
    </script>
  </body>
</html>
Demonstração de arrastar e soltar

Lidando com Drop (Soltar)

Para permitir que um elemento receba itens soltos, você precisa lidar com os eventos dragover e drop.

Por exemplo:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Drag and Drop Example</title>
    <style>
      #drag-item {
        width: 100px;
        height: 100px;
        background-color: rgb(87, 196, 238);
        color: white;
        line-height: 100px;
        text-align: center;
        margin-bottom: 10px;
        cursor: pointer;
      }
      #drop-zone {
        width: 200px;
        height: 100px;
        background-color: rgb(214, 210, 210);
        line-height: 100px;
        text-align: center;
      }
    </style>
  </head>
  <body>
    <div id="drag-item" draggable="true">Drag me</div>
    <div id="drop-zone">Drop here</div>

    <script>
      // JavaScript code goes here
      const dragItem = document.getElementById("drag-item");
      const dropZone = document.getElementById("drop-zone");

      // Drag start event
      dragItem.addEventListener("dragstart", function (event) {
        event.dataTransfer.setData("text/plain", "Drag Successful");
      });

      // Drag over event
      dropZone.addEventListener("dragover", function (event) {
        event.preventDefault(); // Necessary to allow dropping
      });

      // Drop event
      dropZone.addEventListener("drop", function (event) {
        event.preventDefault();
        const data = event.dataTransfer.getData("text/plain");
        console.log("Dropped data:", data);
        dropZone.textContent = `Dropped: ${data}`;
      });
    </script>
  </body>
</html>
Demonstração de arrastar e soltar
✨ Verificar Solução e Praticar

Implementando Arrastar e Soltar para Reordenar

Nesta etapa, você e Alex aprimorarão o rastreador de finanças pessoais, adicionando a capacidade para os usuários reordenarem seus registros financeiros usando arrastar e soltar. Isso envolve capturar vários eventos: dragstart, dragover, drop e garantir que o DOM seja atualizado de acordo.

Primeiro, modifique a função renderRecords em script.js para tornar cada registro arrastável e para lidar com esses eventos:

document.addEventListener("DOMContentLoaded", function () {
  const renderRecords = () => {
    recordsList.innerHTML = "";
    records.forEach((record, index) => {
      const recordElement = document.createElement("div");
      recordElement.setAttribute("draggable", true);
      recordElement.classList.add("record-item");
      recordElement.innerHTML = `
                ${record.description} - ${record.amount} (${record.type}) <button onclick="deleteRecord(${index})">Delete</button>
            `;
      recordElement.addEventListener("dragstart", (e) => {
        draggedIndex = index;
      });
      recordElement.addEventListener("dragover", (e) => {
        e.preventDefault();
      });
      recordElement.addEventListener("drop", (e) => {
        const temp = records[draggedIndex];
        records[draggedIndex] = records[index];
        records[index] = temp;
        saveRecords();
      });
      recordsList.appendChild(recordElement);
    });
  };
});

Esta implementação permite que os usuários arrastem um registro financeiro e o soltem em uma nova posição dentro da lista, com o aplicativo atualizando automaticamente a ordem dos registros.

✨ Verificar Solução e Praticar

Resumo

Neste laboratório, sua jornada com Alex levou à implementação bem-sucedida de um recurso avançado no rastreador de finanças pessoais: a funcionalidade de arrastar e soltar para reordenar registros financeiros. Essa aprimoração não apenas melhora a usabilidade do aplicativo, mas também o apresenta ao tratamento complexo de eventos e às atualizações dinâmicas da interface do usuário no desenvolvimento web. Por meio desse processo, você obteve informações valiosas sobre a criação de aplicativos web interativos e intuitivos que respondem às ações do usuário de maneiras sofisticadas.

Explorar técnicas avançadas de tratamento de eventos, como arrastar e soltar, expandiu seu conjunto de ferramentas como desenvolvedor web, permitindo que você enfrente desafios de UI/UX mais complexos. Esse conhecimento é crucial para a construção de aplicativos web modernos que atendam às altas expectativas dos usuários de hoje em dia em relação à interatividade e capacidade de resposta.