Come faccio ad avere clientX e clientY di lavorare dentro il mio gestore di eventi “trascinare” su Firefox?

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

Domanda

Mozilla Firefox 3.x sembra avere un bug durante l'ascolto di evento "ondrag". L'oggetto evento non segnala la posizione dell'oggetto trascinato, clientX, clientY e altri offset schermo sono tutti impostati a zero. Questo è piuttosto problematico come ho voluto fare un elemento delega basato sull'elemento trascinato e utilizzando naturalmente, clientX e clientY per regolarne la posizione.

So che c'è roba fresca intorno come setDragImage in HTML5 ma voglio fornire un'astrazione generica per DD nativa tra i browser.

il codice difettoso:

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

Nota: Questo problema non si verifica su altri eventi (dragStart, DragOver) e gli eventi MouseMove non può essere catturato mentre si trascina qualcosa.

Si prega di aiutare!

È stato utile?

Soluzione

ho trovato una soluzione, ho messo un ascoltatore sull'evento "DragOver" a livello di documento, ora ho la proprietà Y destra X e che posso esporre attraverso un oggetto condiviso a livello globale.

Altri suggerimenti

L'evento di trascinamento in HTML 5 non è completamente funzionale in odierni browser. Per simulare una situazione n drop trascinare si dovrebbe usare:

  1. Aggiungi un evento onMouseDown, stabilendo un vero var.
  2. Aggiungi un evento onmouseup, impostazione che var falso.
  3. Aggiungi un evento onmousemove, controllando se che var è vero, e se lo è, spostare il div secondo le coordinate.

Questo sempre lavorato per me. Se si incontrano problemi, entrare in contatto di nuovo, posso fornire alcuni esempi.

buona fortuna!

  

So che c'è roba fresca intorno   come ad esempio setDragImage in HTML5 ma io   vuole fornire un'astrazione generica   per DD nativa tra i browser.

Ma perché fare qualcosa di simile, non ci sono librerie come JQuery & Prototype disponibile per cross browser drag & drop?

Oppure, se si desidera implementare una libreria DD del proprio, si può prendere l'aiuto dei loro metodi o estendere loro, come entrambe le librerie sono seguente oggetto paradigma orientato.

Questo farà risparmiare molto tempo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top