Categorias do Site

6 APIs JavaScript desconhecidas que você deve usar

Descubra 6 APIs JavaScript pouco conhecidas para criar aplicações dinâmicas e eficientes.

Um círculo amarelo com as letras

Navegadores modernos vêm equipados com APIs JavaScript nativas poderosas que permitem aos desenvolvedores criar aplicações mais dinâmicas e eficientes sem a necessidade de bibliotecas externas. Neste artigo, exploraremos seis dessas APIs: structuredClone, EyeDropper, AbortController, Intersection Observer, ResizeObserver e a Clipboard API. Para cada uma, explicaremos os problemas que resolve, quando usá-la e como implementá-la.

6 Hidden Gems In The JavaScript API You Should Be Using

Antes de começarmos, é importante entender por que essas APIs não são mais conhecidas, apesar de sua utilidade:

  • São relativamente novas: Muitas dessas APIs foram introduzidas recentemente.
  • Falta de conhecimento: Sites populares e tutoriais geralmente usam soluções antigas, o que resulta em pouca visibilidade para as novas APIs.
  • Suporte limitado de navegadores: Algumas dessas APIs ainda não são totalmente suportadas em todos os navegadores.
  • Casos de uso específicos: Muitas vezes, essas APIs resolvem problemas específicos que nem todos os desenvolvedores encontram.

structuredClone

Clonar objetos profundamente sempre foi um desafio em JavaScript. Com structuredClone, é possível clonar objetos complexos sem bibliotecas externas.

// Objeto original com dados aninhados
const original = {
    name: "Richardson",
    age: 28,
    address: {
        city: "New York",
        street: "Wall Street",
        zip: "10001"
    },
    hobbies: ["reading", "hiking"],
    created: new Date()
};
// Criar um clone profundo usando structuredClone
const copy = structuredClone(original);
// Modificar o clone
copy.name = "Jane";
copy.address.city = "Los Angeles";
copy.hobbies.push("music");
// O objeto original permanece inalterado
console.log("Original:", original);
console.log("Clone:", copy);

Console

EyeDropper API

A API EyeDropper permite criar um seletor de cores nativo, sem bibliotecas externas. Embora ainda seja experimental e disponível apenas no Chrome, Edge e Opera, é útil em aplicativos de edição ou desenho.

<button id="pickColor">Pick a Color</button>
<div id="colorDisplay" style="width: 100px; height: 100px; border: 1px solid #ccc"></div>
<br />
<script>
document.getElementById("pickColor").addEventListener("click", async () => {
    if ("EyeDropper" in window) {
        const eyeDropper = new EyeDropper();
        try {
            const result = await eyeDropper.open();
            document.getElementById("colorDisplay").style.backgroundColor = result.sRGBHex;
        } catch (e) {
            console.error("Error using EyeDropper:", e);
        }
    } else {
        alert("EyeDropper API is not supported in this browser.");
    }
});
</script>

AbortController

AbortController ajuda a cancelar requisições que já foram enviadas, útil para interfaces de busca que precisam lidar com requisições desatualizadas.

import React, { useEffect, useState } from 'react';

function SearchComponent({ query }) {
  const [results, setResults] = useState([]);
  const [loading, setLoading] = useState(false);

  useEffect(() => {
    const controller = new AbortController();
    const signal = controller.signal;

    const debounceRequest = setTimeout(() => {
      setLoading(true);
      fetch(`https://api.example.com/search?q=${query}`, { signal })
        .then(res => res.json())
        .then(data => {
          setResults(data.results);
          setLoading(false);
        })
        .catch(err => {
          if (err.name === 'AbortError') {
          console.log("Request was aborted")
          } else {
            console.log('Search failed', err);
            setLoading(false);
          }
        });
    }, 500);

    return () => {
      clearTimeout(debounceRequest);
      controller.abort();
    };
  }, [query]);

  return (
    <div>
      {loading && <p>Searching...</p>}
      <ul>
        {results.map(r => (
          <li key={r.id}>{r.name}</li>
        ))}
      </ul>
    </div>
  );
}

Intersection Observer

O Intersection Observer permite que você execute código quando elementos entram ou saem do viewport, ideal para carregamento preguiçoso de imagens e rolagem infinita.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Lazy Load Images</title>
    <style>
      body {
        font-family: sans-serif;
        margin: 0;
        padding: 20px;
        background: #f5f5f5;
      }
      img {
        width: 100%;
        max-width: 600px;
        margin: 30px auto;
        display: block;
        min-height: 500px;
        background-color: #ddd;
        object-fit: cover;
        transition: opacity 0.5s ease-in-out;
        opacity: 0;
      }
      img.loaded {
        opacity: 1;
      }
    </style>
  </head>
  <body>
    <img
      data-src="https://images.unsplash.com/photo-1506744038136-46273834b3fb?w=800"
      alt="Forest"
    />
    <script>
      const images = document.querySelectorAll("img[data-src]");
      const observer = new IntersectionObserver(
        (entries, observer) => {
          entries.forEach((entry) => {
            if (!entry.isIntersecting) return;
            const img = entry.target;
            img.src = img.dataset.src;
            img.onload = () => img.classList.add("loaded");
            img.removeAttribute("data-src");
            observer.unobserve(img);
          });
        },
        {
          root: null,
          threshold: 0.1,
        }
      );
      images.forEach((img) => observer.observe(img));
    </script>
  </body>
</html>

ResizeObserver

ResizeObserver permite que desenvolvedores executem código quando um elemento muda de tamanho, útil para interfaces complexas que precisam ajustar o tamanho de texto ou gráficos em tempo real.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Auto-Scaling Text</title>
    <style>
      body {
        font-family: sans-serif;
        padding: 2rem;
      }
      .container {
        width: 60%;
        height: 200px;
        border: 2px dashed #aaa;
        resize: horizontal;
        overflow: hidden;
        padding: 1rem;
      }
      .autoscale-text {
        font-weight: bold;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        transition: font-size 0.2s ease;
      }
    </style>
  </head>
  <body>
    <div class="container" id="textBox">
      <div class="autoscale-text" id="text">
        Resize container to auto scale this text.
      </div>
    </div>
    <script>
      const container = document.getElementById("textBox");
      const text = document.getElementById("text");
      const resizeObserver = new ResizeObserver(() => {
        const containerWidth = container.clientWidth;
        const minFontSize = 12;
        const maxFontSize = 70;
        const minWidth = 200;
        const maxWidth = 800;
        const clampedWidth = Math.max(
          minWidth,
          Math.min(maxWidth, containerWidth)
        );
        const ratio = (clampedWidth - minWidth) / (maxWidth - minWidth);
        const fontSize = minFontSize + (maxFontSize - minFontSize) * ratio;
        text.style.fontSize = fontSize + "px";
      });
      resizeObserver.observe(container);
    </script>
  </body>
</html>

A Clipboard API

A API Clipboard foi introduzida para fornecer acesso programático à área de transferência do sistema, suportando tanto copiar quanto colar conteúdo, como texto e imagens. Requer permissão do usuário e HTTPS.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Clipboard API Example</title>
  </head>
  <body>
    <h2>📋 Clipboard API Demo</h2>
    <button id="copyTextBtn">Copy Text to Clipboard</button>
    <div class="playground">
      <div id="copy-from">This will be copied to the clipboard!</div>
      <div id="copy-to"><textarea></textarea></div>
    </div>

    <img id="copyImage" src="./sample1.png" alt="Sample" />
    <button id="copyImageBtn">Copy Image to Clipboard</button>
    <script>
      // Copy Text
      document
        .getElementById("copyTextBtn")
        .addEventListener("click", async () => {
          try {
            const e = document.getElementById("copy-from");
            await navigator.clipboard.writeText(e.innerText);
            alert("Text copied to clipboard!");
          } catch (err) {
            console.error("Text copy failed:", err);
            alert("Failed to copy text.");
          }
        });
      // Trigger copy event
      document.addEventListener("copy", () =>
        alert("Something was copied to the system clipboard")
      );
      // Trigger paste event
      document.addEventListener("paste", () =>
        alert("Something was pasted from the system clipboard")
      );
      // Copy Image
      document
        .getElementById("copyImageBtn")
        .addEventListener("click", async () => {
          const image = document.getElementById("copyImage");
          try {
            const response = await fetch(image.src);
            const blob = await response.blob();
            const clipboardItem = new ClipboardItem({ [blob.type]: blob });
            await navigator.clipboard.write([clipboardItem]);
            alert("Image copied to clipboard!");
          } catch (err) {
            console.error("Image copy failed:", err);
            alert("Failed to copy image.");
          }
        });
    </script>
  </body>
</html>

Conclusão

Neste artigo, exploramos algumas pérolas ocultas na API JavaScript:

  • structuredClone: Permite clonar objetos JSON profundamente.
  • EyeDropper API: Adiciona a capacidade de escolher cores sem um pacote npm.
  • AbortController: Permite cancelar requisições XHR já enviadas.
  • Intersection Observer: Permite executar código quando um elemento muda de visibilidade.
  • ResizeObserver: Permite executar código quando um elemento muda de tamanho.
  • Clipboard API: Permite copiar imagens junto com texto para a área de transferência do sistema.

Essas APIs nativas do navegador desbloqueiam uma ampla gama de casos de uso — desde clonagem profunda de objetos complexos e observação do tamanho ou visibilidade de elementos até operações de área de transferência e escolha de cores — tudo sem recorrer a pacotes externos. Ao entender e usar essas ferramentas, você pode construir aplicações web mais rápidas, eficientes e com código mais limpo. E o melhor: todas estão embutidas no navegador.

  • Comparando as principais bibliotecas React toast

    Descubra as melhores bibliotecas de toast para React em 2025 e escolha a ideal para seu projeto.

    Descubra as melhores bibliotecas de toast para React em 2025 e escolha a ideal para seu projeto.

    Ler notícia completa
    Mãos inserindo torradas em uma torradeira, sobrepostas por um ícone de átomo azul.
  • IA Agentica: Decisões Autônomas em Empresas

    Empresas adotam IA agentica para decisões autônomas, prometendo eficiência e redução de custos operacionais.

    Empresas adotam IA agentica para decisões autônomas, prometendo eficiência e redução de custos operacionais.

    Ler notícia completa
    Textura de superfície escura com manchas verdes e azuis brilhantes sobre um fundo preto e texto sobre inteligência artificial.
  • TanStack Start ou Next.js: Escolha o melhor framework React

    Comparação entre TanStack Start e Next.js: conheça suas diferenças e escolha o framework React ideal para seu projeto.

    Comparação entre TanStack Start e Next.js: conheça suas diferenças e escolha o framework React ideal para seu projeto.

    Ler notícia completa
    Imagem apresenta dois ícones sobre fundo azul em degradê: à esquerda, um ícone de praia tropical com palmeira; à direita, um ícone preto com a letra N. Texto
  • Guia Completo de Técnicas de Design UX

    O design UX pode ser confuso com tantas tarefas a realizar, mas é essencial acertar nas técnicas de design. Este guia apresenta as técnicas de design mais utilizadas no UX, desde a pesquisa de usuários até a prototipagem e testes. O primeiro passo é entender profundamente seus usuários. Técnicas de pesquisa incluem entrevistas, pesquisas, estudos […]

    Aprenda técnicas essenciais de UX Design para melhorar a experiência do usuário, desde pesquisa até prototipagem.

    Ler notícia completa
    Ícones de paleta de design gráfico em tons de rosa e roxo sobre um fundo rústico e texturizado de cor clara.
  • Inclua pesquisa para um design mais inclusivo

    O design inclusivo não começa em um arquivo do Figma ou em um caderno de esboços. Ele começa bem antes disso — com a compreensão dos usuários, para que você possa criar soluções que realmente funcionem para eles. Esse tipo de percepção não acontece por acaso; é necessário pesquisa intencional e inclusiva. Não se preocupe […]

    Design inclusivo começa com pesquisa inclusiva. Saiba como integrar inclusão no UX desde o início.

    Ler notícia completa
    Prancheta com gráfico de pizza e lista de tarefas, flutuando sobre um fundo roxo e azul ondulado com reflexos de luz.
  • Construção de UI com Google Stitch: Futuro do Frontend?

    O Google Stitch é uma ferramenta de design e desenvolvimento de UI impulsionada por IA que permite gerar designs de UI de qualidade profissional e código-fonte para web e mobile a partir de comandos de texto. O coding por “vibe” envolve o uso de IA para construir aplicações via prompts, sendo eficaz para design. Vamos […]

    Descubra como o Google Stitch pode revolucionar o design de interfaces com IA, gerando códigos e designs responsivos para web e mobile.

    Ler notícia completa
    Logo colorido do Google ao lado de um carretel de madeira com linha preta e agulha, sobre fundo branco.
  • Apple revive skeuomorfismo com Liquid Glass

    Todos estão comentando sobre Liquid Glass, a nova linguagem de design da Apple, revelada no WWDC 2025. A primeira impressão é de um visual brilhante, com camadas translúcidas e refrações brilhantes. No entanto, para quem conhece a história do skeuomorfismo da Apple, sabe que vai além de uma atualização estética. É um retorno ao UI […]

    Apple traz de volta o skeuomorfismo com o design Liquid Glass, repleto de camadas translúcidas e refrações brilhantes.

    Ler notícia completa
    Surfista com prancha à beira-mar ao pôr do sol, com telas flutuantes mostrando relógios mundiais, calendário, lembretes e clima.
  • Como Matthew Pizzi criou um LMS escalável e flexível

    Matthew Pizzi é Diretor de Produto da Contentstack. Ele fundou a Train Simple, adquirida pela Pluralsight em 2016. Agora, lidera a integração de IA e desenvolvimento de LMS na Contentstack. Na conversa, Matthew explica como ajudou a desenvolver a Contentstack Academy, destacando a personalização para diferentes perfis de aprendizagem e a escalabilidade. Construindo uma plataforma […]

    Descubra como Matthew Pizzi desenvolveu o Contentstack Academy, um LMS inovador e flexível, utilizando tecnologia de ponta.

    Ler notícia completa
    Banner profissional com foto de Matthew Pizzi, Diretor de Produto na Contentstack, logotipos de Contentstack e LogRocket, sobre fundo roxo com linhas azuis e rosas.
  • Como criar variações de estilo em temas WordPress

    Os temas de bloco do WordPress oferecem grande flexibilidade, permitindo alterações de estilo e layout diretamente no navegador, sem necessidade de programação. Eles podem incluir padrões de bloco e variações de estilo. As variações de estilo oferecem um ponto de partida para o design, permitindo criar combinações de cores e tipografias, assim como estilos de […]

    Aprenda a criar variações de estilo em temas WordPress para personalizar seu site sem precisar de conhecimentos em programação.

    Ler notícia completa
    Interface de usuário de um tema de site, mostrando opções de estilo com variações de cor e fonte.