Como faço para obter clientX e clientY ao trabalho dentro do meu manipulador de eventos “arrastar” no Firefox?

StackOverflow https://stackoverflow.com/questions/887316

Pergunta

Mozilla Firefox 3.x parece ter um bug ao ouvir evento "ondrag". O objeto de evento não informa a posição do objeto que está sendo arrastado, clientX, clientY e outros desvios de tela estão todos definidos para zero. Isto é bastante problemático como eu queria fazer um elemento de proxy baseado no elemento que está sendo arrastado e usando claro, clientX e clientY para ajustar sua posição.

Eu sei que há coisas interessantes ao redor, como setDragImage em HTML5, mas eu quero dar uma abstração genérica para DD nativa entre os navegadores.

código defeituoso:

document.addEventListener('drag', function(e) {
    console.log(e.clientX); // always Zero
}, false);

Nota: Este problema não acontece em outros eventos (dragstart, dragover) e os eventos mousemove não pode ser capturado enquanto arrasta somethin'.

Por favor, ajuda!

Foi útil?

Solução

Eu encontrei uma solução, eu tenho colocado um ouvinte sobre o evento "dragover" no nível do documento, agora eu recebo o X direita e propriedades Y que eu possa expor através de um objeto global compartilhado.

Outras dicas

O evento de arrastar em HTML 5 não é totalmente funcional no actual navegadores. Para simular uma situação arraste n soltar você deve usar:

  1. Adicionar um evento onmousedown, estabelecendo um var verdade.
  2. Adicionar um evento onmouseup, estabelecendo que var falsa.
  3. Adicionar um evento onmousemove, verificando se que var é verdade, e se for, mova o div de acordo com as coordenadas.

Isso sempre funcionou para mim. Se você enfrentar qualquer problema, entrar em contato novamente, eu posso dar alguns exemplos.

boa sorte!

Eu sei que não é legal em torno de coisas tais como setDragImage em HTML5, mas eu quer fornecer uma abstração genérica para DD nativa entre os navegadores.

Mas por que fazer algo assim, não estão lá bibliotecas como JQuery & Prototype disponível para cruz navegador drag & drop?

Ou então se você quiser implementar uma biblioteca DD do seu próprio país, você pode ter ajuda de seus métodos ou estendê-los, tanto como as bibliotecas estão seguindo objeto paradigma orientado.

Isto vai poupar muito tempo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top