SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
19.01.2025

Como Remover o Fantasma do Arrasto em CSS/JS: Métodos

Resposta Rápida

Para bloquear o arrasto de uma imagem, defina o atributo draggable="false" para o elemento <img> e adicione user-select: none; no CSS para evitar a seleção acidental de texto. Use JavaScript para bloquear eventos dragstart.

<img src="imagem.png" draggable="false" style="user-select: none;">
document.addEventListener('dragstart', function(event) {
  event.preventDefault();
});

Análise das Técnicas de Prevenção de Arrasto

Vamos explorar mais profundamente este assunto para uma melhor compreensão e controle sobre o processo de arrasto.

Prevenção Completa do Arrasto

Você pode prevenir o arrasto de todos os elementos da seguinte maneira:

/* Modo secreto: todos os elementos permanecem imóveis */
* {
  -webkit-user-drag: none;
  user-drag: none;
  user-select: none;
}

Esta ação é semelhante ao comando "Fique parado!" para cada elemento em seu site.

Prevenção de Arrasto em Navegadores Baseados em Webkit

Em navegadores baseados em Webkit, pode ser necessário usar a propriedade -webkit-user-drag:

/* Instruções para Webkit */
.no-drag {
  -webkit-user-drag: none;
  user-select: none;
}

O seguinte JavaScript convencerá o navegador a impor suas regras:

element.setAttribute('draggable', false);
element.ondragstart = function() { return false; };

Funcionalidade de Suporte

Usar pointer-events: none; ajuda a isolar o elemento da interação; no entanto, isso afetará todos os tipos de interações, incluindo cliques e hover, então use esta propriedade com cautela:

/* Aplicação cuidadosa */
.no-pointer-events {
  pointer-events: none;
}

Não desative todos os eventos em JavaScript. É importante manter a responsividade da aplicação:

element.ondragstart = function(event) { event.preventDefault(); };

Visualização

Vamos supor que você tenha um adesivo (🏷️) na sua página que você queira manter estacionário:

Prevenindo o arrasto do adesivo: (🚫🖐️🏷️)

Aplicaremos métodos confiáveis de CSS/JS para garantir que tudo permaneça no lugar:

.sticker {
  user-drag: none; /* 🚫 Não pode arrastar! */
  user-select: none; /* 🤐 Seleção está desabilitada */
}

Fortaleceremos o bloqueio com um feitiço mágico em JS que manterá o adesivo no lugar:

document.querySelector('.sticker').addEventListener('dragstart', function(event) {
  event.preventDefault(); // "Você deve ficar aqui!" 🧙‍♂️
});

Agora o adesivo (🏷️) está permanentemente preso à sua página — arrastar é impossível.

Gerenciando Interações de Toque em Dispositivos Móveis

Dispositivos habilitados para toque têm suas particularidades 🕺, e draggable="false" não os impede. Você precisa aplicar uma propriedade específica no CSS:

/* Otimização para dispositivos móveis */
.no-drag {
  touch-action: none;
}

Isso mantém um comportamento consistente, independentemente do dispositivo. touch-action permite que você controle como os elementos respondem aos eventos de toque.

Nuances da Interação com Elementos

Ao lidar com interações em JavaScript, considere os cliques:

element.addEventListener('mousedown', function(event) {
  if (event.target.classList.contains('no-drag')) {
    event.preventDefault();
  }
});

Uma configuração adequada em JavaScript torna a interação com os elementos intuitiva e confortável.

Versatilidade e Compatibilidade

Cada navegador é como cada convidado em uma festa. Prepare regras de CSS cross-browser para cada um deles:

/* Código de vestimenta rigoroso para a "festa do navegador" */
.no-drag {
  user-select: none;
  -moz-user-select: none; /* Para Firefox */
  -webkit-user-drag: none; /* Para Webkit */
  -ms-user-select: none; /* Lembra do IE? */
}

E o DJ JavaScript garante vibrações cross-browser:

/* Vibrações do IE da velha escola */
var isIE = /Trident/.test(navigator.userAgent);

/* Especialmente para os fãs do IE */
if (isIE) {
  element.setAttribute('unselectable', 'on'); // Atributo específico do IE
}

Recursos Úteis

  1. Operações de Arrasto - API Web | MDN - Um guia abrangente sobre operações de arrastar e soltar na web e a API correspondente.
  2. API de Arrastar e Soltar em HTML - Um recurso de aprendizado para dominar rapidamente arrastar e soltar no HTML5.
  3. Carregamento de Arquivos Arrastando e Soltando | CSS-Tricks - Um guia prático para implementar a funcionalidade de upload de arquivos arrastando e soltando.
  4. Método: preventDefault() Evento - API Web | MDN - Uma explicação detalhada de como cancelar a ação padrão do navegador.
  5. Criando um Elemento Arrastável em JavaScript | KIRUPA - Um guia passo a passo para criar elementos arrastáveis usando JavaScript.
  6. DataTransfer - API Web | MDN - Uma análise aprofundada do objeto DataTransfer.

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!