Existe uma maneira de impedir que o usuário veja um fantasma da imagem que está tentando arrastar (não se preocupe com a segurança das imagens, mas com a experiência).
Eu tentei isso que corrige o problema com a seleção azul no texto e nas imagens, mas não na imagem fantasma:
img {
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-o-user-select: none;
user-select: none;
}
(Também tentei aninhar a imagem dentro de uma div com as mesmas regras aplicadas à div). obrigado
javascript
html
css
user885355
fonte
fonte
Respostas:
Você pode definir o
draggable
atributofalse
na marcação ou no código JavaScript.fonte
<img id="myImage" src="http://placehold.it/150x150" draggable="false">
-moz-user-select: none
. Solução possível: Adicionarpointer-events: none
.draggable
parafalse
desativará completamente o recurso de arrastar e soltar.Eu acho que você pode mudar sua
dentro de
fonte
Tente:
e tente evitar
fonte
Você pode usar uma propriedade CSS para desativar imagens em navegadores de kit da web.
fonte
-ms-user-drag
,-moz-user-drag
euser-drag
. Uma ótima solução apenas para CSS!Isso desabilitará o arrasto de uma imagem em todos os navegadores , preservando outros eventos, como clicar e passar o mouse. Funciona desde que qualquer HTML5, JS ou CSS esteja disponível.
<img draggable="false" onmousedown="return false" style="user-drag: none" />
Se você está confiante de que o usuário terá JS, é necessário usar apenas o atributo JS, etc. Para obter mais flexibilidade, consulte ondragstart, onselectstart e alguns WebKit toques / toques em CSS.
fonte
onmousedown="return false"
é suficiente. Também é necessário evitar que o usuário selecione a imagem enquanto a arrasta, o que permitiria arrastar a seleção.Lidar com o
dragstart
evento ereturn false
.fonte
Você pode atribuir uma imagem fantasma alternativa se realmente precisar usar eventos de arrasto e não puder definir draggable = false. Então, basta atribuir um png em branco da seguinte maneira:
fonte
setDragImage
, mesmo se eles suportam arrastar e soltar, por exemplo, IE10 / 11.dragIcon.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
Coloque a imagem como plano de fundo de uma div vazia ou sob um elemento transparente. Quando o usuário clica na imagem para arrastar, ele está clicando em uma div.
Consulte http://www.flickr.com/photos/thefella/5878724253/?f=hp
fonte
Para o Firefox, você precisa ir um pouco mais fundo com isso:
Aproveitar.
fonte
Descobri que, para o IE, você deve adicionar o atributo draggable = "false" às imagens e âncoras para evitar arrastar. as opções de CSS funcionam para todos os outros navegadores. Eu fiz isso no jQuery:
fonte
Há uma solução muito mais fácil aqui do que adicionar ouvintes de eventos vazios. Basta definir
pointer-events: none
a sua imagem. Se você ainda precisa clicar, adicione um contêiner ao redor dele que aciona o evento.fonte
fonte
Testado no Firefox: remover e colocar de volta a imagem funciona! E é transparente na execução também. Por exemplo,
Edição : Isso funciona apenas no IE e no Firefox, estranhamente. Eu também adicionei
draggable = false
em cada imagem. Ainda é um fantasma com o Chrome e o Safari.EDIT 2 : A solução de imagem de fundo é realmente a melhor. A única sutileza é que a
background-size
propriedade precisa ser redefinida toda vez que a imagem de fundo é alterada! Ou então, é assim que parecia do meu lado. Melhor ainda, tive um problema comimg
tags normais no IE, onde o IE não conseguiu redimensionar as imagens. Agora, as imagens têm as dimensões corretas. Simples:Além disso, talvez considere os seguintes:
fonte
Você pode definir a imagem exibida quando um item é arrastado. Testado com o Chrome.
setDragImage
usar
Como alternativa, como já mencionado nas respostas, você pode definir
draggable="false"
o elemento HTML, se não conseguir arrastar o elemento, não há problema.fonte
O "tudo para tudo", para não selecionar ou arrastar, com todos os prefixos do navegador:
Você também pode definir o
draggable
atributo parafalse
. Você pode fazer isso com HTML de inline:draggable="false"
com Javascript:elm.draggable = false
ou com jQuery:elm.attr('draggable', false)
.Você também pode manipular a
onmousedown
função parareturn false
. Você pode fazer isso com HTML embutido:,onmousedown="return false"
com Javascript:elm.onmousedown=()=>return false;
ou com jQuery:elm.mousedown(()=>return false)
fonte
Este trabalho para mim, eu uso alguns scripts lightbox
fonte