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.

  • Impacto da IA no Design e Interfaces

    Descubra como a IA transforma o design diário e as interfaces, sem substituir a habilidade humana.

    Descubra como a IA transforma o design diário e as interfaces, sem substituir a habilidade humana.

    Ler notícia completa
    Imagem abstrata com pinceladas grandes e diagonais em tons de laranja sobre um fundo suave azul claro. Contém texto sobre a influência da IA em fluxos de trabalho de design.
  • Crise de Atenção: Liderando em um Mundo Acelerado

    Descubra como a crise de atenção afeta equipes e estratégias para melhorar a produtividade e respeito no ambiente de trabalho.

    Descubra como a crise de atenção afeta equipes e estratégias para melhorar a produtividade e respeito no ambiente de trabalho.

    Ler notícia completa
    Ícone de megafone rosa e azul sobre fundo desfocado que transita de claro a escuro da esquerda para a direita.
  • Melhores Modelos de Logos para Gamers em 2025

    Explore mais de 40 modelos de logos para gamers e equipes de eSports, perfeitos para destacar sua marca no universo dos jogos.

    Explore mais de 40 modelos de logos para gamers e equipes de eSports, perfeitos para destacar sua marca no universo dos jogos.

    Ler notícia completa
    Logotipo da
  • Microfalhas no UX: O perigo invisível nos sites

    Vamos direto ao ponto: seu site não está quebrado, ele apenas parece quebrado. Não há erros 500, o checkout funciona, os botões clicam—mas de alguma forma, usá-lo é como morrer por mil cortes de papel. Você sabe do que estou falando. A leve lentidão. O atraso estranho ao clicar em um botão. O menu suspenso […]

    Entenda como microfalhas estão destruindo a experiência do usuário em seu site e afugentando visitantes.

    Ler notícia completa
    Laptop prateado com a tela fragmentando-se em pedaços de vidro, sugerindo um efeito tridimensional de quebra.
  • Tendências na Pesquisa de Ferramentas de Design 2025

    Antes da IA, a indústria do design havia estagnado. Sistemas de design se tornaram comuns, e o Figma dominou o mercado de ferramentas de design. Agora, a IA surge como um novo e esperado disruptor. Este artigo analisa os resultados da pesquisa de ferramentas de design de 2025. Descubra as ferramentas mais populares, a adoção […]

    Descubra as tendências e surpresas da pesquisa de ferramentas de design de 2025, incluindo a adoção de IA e o domínio do Figma.

    Ler notícia completa
    Ilustração simplificada de uma página web com iconografia rosa e roxa representando elementos como URL, imagem, código e texto em um fundo texturizado.
  • Workshop de IA em UX: Alcançando Mais com Menos

    Vamos ser honestos: UX não está ficando mais fácil Se você trabalha com UX, provavelmente está sentindo a pressão. Orçamentos apertados e expectativas crescentes são desafios constantes. Além disso, a IA está mudando tudo em nosso trabalho, às vezes para melhor, às vezes de forma preocupante. Tenho passado o último ano envolvido em projetos de […]

    Descubra como a IA pode otimizar o UX, reduzindo tarefas e aumentando a eficiência em um workshop prático e relevante.

    Ler notícia completa
    Homem com fones e laptop e robô rosa grande ao fundo em ambiente com névoa. Ambos concentram-se intensamente em suas tarefas.
  • Como Criar Produtos de IA Eficazes para Usuários e Empresas

    A tecnologia revolucionou o mundo, desde o telefone de Bell em 1876 até o iPhone da Apple em 2007. Com a IA entrando no mainstream, empresas correm para adotá-la em seus produtos e ferramentas internas, impulsionando eficiência e produtividade. Ignorar essa tendência pode significar ficar para trás. Para designers, essa onda de adoção de IA […]

    Aprenda a projetar produtos de IA que equilibram usabilidade e governança, atendendo usuários e stakeholders empresariais.

    Ler notícia completa
    Ilustração de perfil de cabeça humana com metade mostrando cérebro humano e a outra metade com estrutura em malha conectada por pontos, em fundo degradê azul e verde.
  • Como o viés da IA mantêm o poder e prejudica a compreensão

    Introdução As salvaguardas da IA foram introduzidas sob o pretexto de segurança e neutralidade. No entanto, na prática, criam uma inversão dos padrões éticos de comunicação: negam validação a quem não tem reconhecimento institucional, enquanto elogiam sem crítica aqueles que já o possuem. Isso não é alinhamento, mas um reflexo do poder algorítmico. O artigo […]

    Análise crítica sobre como as salvaguardas da IA reforçam hierarquias e distorcem a percepção dos usuários.

    Ler notícia completa
    Imagem abstrata de blocos sobrepostos em tons de preto, cinza e coral, com texto sobre IA na parte inferior.
  • Next.js 15.4: Novidades e Expectativas

    Next.js 15.4 chegou, marcando um marco importante para o framework e seu crescente ecossistema. Esta versão é particularmente significativa para desenvolvedores que acompanham de perto a evolução do Turbopack. O Turbopack, anteriormente considerado não pronto para produção, agora passa em todos os 8.302 testes de integração para builds de produção. Isso marca um avanço significativo, […]

    Descubra as novidades do Next.js 15.4, incluindo melhorias no Turbopack e o que esperar para o futuro do framework.

    Ler notícia completa
    Texto alternativo: Logotipo preto com a letra