Per trascinare i dati all'interno e all'esterno di un'applicazione basata su HTML (o all'interno e all'esterno dell'HTML visualizzato in un HTMLLoader), è possibile utilizzare eventi di trascinamento HTML. L'API di trascinamento HTML consente di trascinare verso e da elementi DOM all'interno del contenuto HTML.
Nota:
è possibile inoltre utilizzare le API NativeDragEvent e NativeDragManager di AIR intercettando gli eventi sull'oggetto HTMLLoader che include il contenuto HTML. Tuttavia, l'API HTML è meglio integrata con il DOM HTML e consente di controllare il comportamento predefinito.
Comportamento di trascinamento predefinito
L'ambiente HTML offre un comportamento predefinito per i movimenti di trascinamento che coinvolgono testo, immagini e URL. Con il comportamento predefinito, è possibile sempre trascinare questi tipi di dati fuori da un elemento. Tuttavia, è possibile trascinare solo testo in un elemento e solo a elementi in un'area modificabile di una pagina. Quando si trascina testo tra o all'interno di aree modificabili di una pagina, il comportamento predefinito esegue un'azione di spostamento. Quando si trascina testo in un'area modificabile da un'area non modificabile o dall'esterno dell'applicazione, il comportamento predefinito esegue un'azione di copia.
È possibile sostituire il comportamento predefinito gestendo da solo eventi di trascinamento. Per annullare il comportamento predefinito, è necessario chiamare i metodi
preventDefault()
degli oggetti inviati per gli eventi di trascinamento. È possibile quindi inserire dati nella destinazione di rilascio e rimuovere dati dall'origine del trascinamento secondo necessità al fine di eseguire l'azione selezionata.
Per impostazione predefinita, l'utente può selezionare e trascinare qualsiasi testo e trascinare immagini e collegamenti. È possibile utilizzare la proprietà WebKit CSS,
-webkit-user-select
per controllare come si possa selezionare qualsiasi elemento HTML. Ad esempio, se si imposta
-webkit-user-select
su
none
, il contenuto dell'elemento non è selezionabile e quindi non può essere trascinato. È possibile inoltre utilizzare la proprietà CSS,
-webkit-user-drag
per controllare se è possibile trascinare un elemento come intero. Tuttavia, il contenuto dell'elemento viene trattato in modo separato. L'utente potrebbe ancora trascinare una porzione selezionata del testo. Per ulteriori informazioni, vedete
CSS in AIR
.
Eventi di trascinamento in HTML
Gli eventi, inviati dall'elemento promotore da cui ha origine un trascinamento, sono:
Evento
|
Descrizione
|
dragstart
|
Inviato quando l'utente inizia il movimento di trascinamento. Il gestore di questo evento può evitare il trascinamento, se necessario, chiamando il metodo preventDefault() dell'oggetto evento. Per controllare se è possibile copiare, collegare o spostare i dati trascinati, impostare la proprietà effectAllowed. Testo, immagini e collegamenti selezionati vengono posti negli Appunti dal comportamento predefinito, ma è possibile impostare dati differenti per il movimento di trascinamento mediante la proprietà dataTransfer dell'oggetto evento.
|
drag
|
Inviato continuamente durante il movimento di trascinamento.
|
dragend
|
Inviato quando l'utente rilascia il pulsante del mouse per terminare il movimento di trascinamento.
|
Gli eventi inviati da una destinazione di trascinamento sono:
Evento
|
Descrizione
|
dragover
|
Inviato continuamente mentre il movimento di trascinamento resta all'interno dei limiti dell'elemento. Il gestore di questo evento deve impostare la proprietà dataTransfer.dropEffect a indicare se il rilascio determinerà un'azione di copia, spostamento o collegamento qualora l'utente rilasci il mouse.
|
dragenter
|
Inviato quando il movimento di trascinamento raggiunge i limiti dell'elemento.
Se si modifica qualsiasi proprietà di un oggetto dataTransfer in un gestore eventi dragenter, queste modifiche vengono rapidamente sostituite dal successivo evento dragover. D'altro canto, vi è un breve ritardo tra un evento dragenter e il primo evento dragover che possono determinare il lampeggiare del cursore qualora vengano impostate le diverse proprietà. In molti casi, è possibile utilizzare lo stesso gestore per entrambi gli eventi.
|
dragleave
|
Inviato quando il movimento di trascinamento esce dai limiti dell'elemento.
|
drop
|
Inviato quando l'utente rilascia i dati sull'elemento. È possibile accedere ai dati solo all'interno del gestore per questo evento.
|
L'oggetto evento inviato in risposta a questi eventi è simile a un evento di mouse. È possibile utilizzare le proprietà evento del mouse come (
clientX
,
clientY
) e (
screenX
,
screenY
), per determinare la posizione del mouse.
La proprietà più importante di un oggetto evento di trascinamento è
dataTransfer
, contenente i dati trascinati. L'oggetto
dataTransfer
stesso ha le seguenti proprietà e metodi:
Proprietà o metodo
|
Descrizione
|
effectAllowed
|
L'effetto consentito dall'origine del trascinamento. Di solito, il gestore dell'evento dragstart imposta questo valore. consultate
Effetti di trascinamento in HTML
.
|
dropEffect
|
L'effetto consentito dalla destinazione o dall'utente. Se si imposta
dropEffect
in un gestore eventi
dragover
o
dragenter
, AIR quindi aggiorna il cursore del mouse a indicare l'effetto che si verifica qualora l'utente rilasci il mouse. Se l'impostazione
dropEffect
non soddisfa uno degli effetti consentiti, non è possibile alcun rilascio e viene visualizzato il cursore
non disponibile
. Se non è stato impostato un
dropEffect
in risposta all'ultimo evento
dragover
o
dragenter
, l'utente può quindi scegliere tra gli effetti consentiti tramite i tasti modificatore standard del sistema operativo.
L'effetto finale è riportato dalla proprietà
dropEffect
dell'oggetto inviato per
dragend
. Se l'utente sospende il rilascio lasciando il mouse all'esterno di un'idonea destinazione,
dropEffect
è impostato su
none
.
|
types
|
Un array contenente le stringhe di tipo MIME per ciascun formato di dati presente nell'oggetto
dataTransfer
.
|
getData(mimeType)
|
Recupera i dati nel formato specificato dal parametro
mimeType
.
Il metodo
getData()
può essere richiamato solo in risposta all'evento
drop
.
|
setData(mimeType)
|
Aggiunge i dati al
dataTransfer
nel formato specificato dal parametro mimeType. È possibile aggiungere dati in più formati chiamando
setData()
per ogni tipo MIME. Vengono cancellati tutti i dati posti nell'oggetto
dataTransfer
tramite il comportamento predefinito di trascinamento.
Il metodo
setData()
può essere richiamato solo in risposta all'evento
dragstart
.
|
clearData(mimeType)
|
Cancella tutti i dati nel formato specificato dal parametro
mimeType
.
|
setDragImage(image, offsetX, offsetY)
|
Imposta un'immagine di trascinamento personalizzata. Il metodo
setDragImage()
può essere chiamata solo in risposta all'evento dragstart e solo quando viene trascinato un intero elemento HTML impostando il suo stile CSS
-webkit-user-drag
su
element
. Il parametro
image
può essere un elemento JavaScript o un oggetto Image.
|
Tipi MIME per trascinamento HTML
I tipi MIME da utilizzare con l'oggetto
dataTransfer
di un evento di trascinamento HTML:
Formato dati
|
Tipo MIME
|
Testo
|
"text/plain"
|
HTML
|
"text/html"
|
URL
|
"text/uri-list"
|
Bitmap
|
"image/x-vnd.adobe.air.bitmap"
|
Elenco file
|
"application/x-vnd.adobe.air.file-list"
|
È possibile utilizzare anche altre stringhe MIME, comprese le stringhe definite dall'applicazione. Tuttavia, altre applicazioni potrebbero non essere in grado di riconoscere o utilizzare i dati trasferiti. È vostra responsabilità aggiungere dati all'oggetto
dataTransfer
nel formato previsto.
Importante:
solo il codice eseguito nella sandbox dell'applicazione può accedere ai file rilasciati. Il tentativo di leggere o impostare qualsiasi proprietà di un oggetto File in una sandbox di non applicazione genera un errore di sicurezza. Per ulteriori informazioni, consultate
Gestione dei rilasci di file nelle sandbox HTML di non applicazione
.
Effetti di trascinamento in HTML
Il promotore del movimento di trascinamento può limitare gli effetti di trascinamento consentiti impostando la proprietà
dataTransfer.effectAllowed
nel gestore dell'evento
dragstart
. È possibile utilizzare i seguenti valori stringa:
Valore stringa
|
Descrizione
|
"none"
|
Non è consentita alcuna operazione di trascinamento.
|
"copy"
|
I dati verranno copiati alla destinazione, lasciando in posizione l'originale.
|
"link"
|
I dati verranno condivisi con la destinazione di rilascio mediante un collegamento all'originale.
|
"move”
|
I dati verranno copiati alla destinazione e rimossi dalla posizione originale.
|
"copyLink"
|
È possibile copiare o collegare i dati.
|
"copyMove"
|
È possibile copiare o spostare i dati.
|
"linkMove"
|
È possibile collegare o spostare i dati.
|
"all"
|
È possibile copiare, spostare o collegare i dati.
All
è l'effetto predefinito quando si evita il comportamento predefinito.
|
La destinazione del movimento di trascinamento può impostare la proprietà
dataTransfer.dropEffect
per indicare l'azione da intraprendere se l'utente completa il rilascio. Se l'effetto di rilascio è una delle azioni consentite, il sistema visualizza il cursore appropriato per copia, spostamento o collegamento. In caso contrario, il sistema visualizza il cursore
non disponibile
. Se non è impostato alcun effetto di rilascio dalla destinazione, l'utente può scegliere tra le azioni consentite con i tasti modificatore.
Impostate il valore
dropEffect
nei gestori per entrambi gli eventi
dragover
e
dragenter
:
function doDragStart(event) {
event.dataTransfer.setData("text/plain","Text to drag");
event.dataTransfer.effectAllowed = "copyMove";
}
function doDragOver(event) {
event.dataTransfer.dropEffect = "copy";
}
function doDragEnter(event) {
event.dataTransfer.dropEffect = "copy";
}
Nota:
sebbene sia necessario impostare sempre la proprietà
dropEffect
nel gestore per
dragenter
, accertatevi che l'evento
dragover
successivo reimposti la proprietà al suo valore predefinito. Impostate
dropEffect
in risposta a entrambi gli eventi.
|
|
|