Come funziona l'operazione di trascinamento della selezione. Tecnica Drag-n-Drop usando jQuery. Limitazione sugli elementi mobili consentiti
La funzione Drag and Drop può aiutarti a migliorare le prestazioni del tuo iPad. Ecco come puoi usarlo.
Quindi puoi spostare un file da un servizio di archiviazione cloud a un altro, copiare il testo da Safari in un'app di modifica del testo per aggiungere un preventivo o creare backup alcune foto nell'applicazione di archiviazione file.
Come trascinare e rilasciare foto, file e testo
1. Tocca e tieni premuta la foto, il file o il testo evidenziato che desideri trascinare su un'altra app.
2. Trascina l'elemento nella posizione desiderata in questa applicazione o in un'altra che hai aperto in Slide Over o Split View e rilascia.
Come trascinare e rilasciare più foto o file contemporaneamente
1. Tocca e tieni premuta una delle foto o dei file che desideri trascinare.
2. Mentre trascini l'elemento corrente, tocca un'altra foto o un altro file che desideri trascinare. Fallo di nuovo con tutti gli elementi che vuoi spostare.
3. Trascina tutti gli oggetti selezionati nel punto designato in un'altra applicazione che hai aperto in Slide Over o Split View e rilasciali.
Come trascinare il testo da un'applicazione all'altra
1. Tocca e tieni premuta la parte del testo che desideri trascinare per selezionarla.
2. Usa i punti di selezione per evidenziare il resto del testo che desideri trascinare.
3. Tenere premuto il testo selezionato.
4. Trascina il testo sull'applicazione in cui desideri inserirlo e rilascialo.
Come modificare la posizione delle icone di più applicazioni contemporaneamente utilizzando "Drag and Drop"
Mentre la maggior parte delle funzionalità di trascinamento della selezione di iOS funziona solo su iPad, questo trucco funziona effettivamente sia su iPhone che su iPad. Ciò consente di organizzare la posizione delle applicazioni nella schermata iniziale utilizzando « Trascina e rilascia" invece di spostarli uno per uno.
1. Toccare e tenere premuta l'icona dell'app che si desidera riposizionare nella schermata iniziale.
2. Tocca altre app che desideri spostare.
3. Trascina queste app nella pagina o nella cartella in cui desideri che si trovino e rilasciale.
Recentemente ho avuto l'idea di sviluppare un gioco per Android. Per cominciare, ho deciso di scrivere scacchi. Ho pensato alla tecnologia Trascinare e rilasciare perfetto per implementare il meccanismo per lo spostamento delle forme. Per chi non lo sapesse, lo prendo atto il metodo di trascinamento della selezione è nella possibilità di trascinare alcuni oggetti grafici su altri ed eseguire una o l'altra azione dopo il rilascio. L'esempio più semplice- rimuovi il collegamento dal desktop del tuo PC trascinandolo nel cestino. "Gettando" l'etichetta nel cestino, diciamo al sistema che vogliamo far interagire questi due oggetti. Il sistema riceve il nostro segnale e decide quale azione intraprendere. Il trascinamento della selezione è diventato molto diffuso grazie alla sua chiarezza intuitiva. Questo approccio è supportato dalla nostra esperienza di interazione con oggetti del mondo reale e funziona alla grande in un ambiente virtuale. Come per gli scacchi, utilizzando il drag and drop è tecnologicamente più semplice determinare la cella dove l'utente ha trascinato il pezzo, poiché non è necessario calcolare il numero di cella dalle coordinate del punto di rilascio. Questo lavoro sarà preso in carico dalla macchina virtuale.
Scopi dell'utilizzo della tecnologia Drag n Drop
L'utilizzo della tecnologia drag and drop mi consente di risolvere tre problemi con poco sangue:
- Visualizzazione del movimento. Quando l'utente tocca una forma e inizia a spostarla sullo schermo, la forma viene sostituita da un disegno più piccolo. Pertanto, l'utente comprende che la figura viene acquisita.
- Ho limitato l'area di movimento della figura alle dimensioni della tavola.
- Se l'utente rilascia la forma nel posto sbagliato, dovrebbe tornare alla sua posizione originale.
I compiti sono definiti, iniziamo la loro attuazione.
Sostituisci ImageView al tocco
Tutte le mie forme sono oggetti ImageView. Sfortunatamente, si è scoperto che l'implementazione del Drag & Drop in Android non consente "immediatamente fuori dagli schemi" di sostituire l'immagine di un oggetto quando viene toccato. Tuttavia, questo compito è abbastanza risolvibile tramite l'API. Dobbiamo eseguire una serie di semplici passaggi:
- Crea un oggetto DragShadowBuilder.
- Chiama il metodo startDrag.
- Nascondi il nostro ImageView che mostra la forma chiamando il metodo setVisibility con il parametro View.INVISIBLE. Di conseguenza, solo l'oggetto DragShadowBuilder rimarrà sullo schermo, il che segnalerà all'utente che la forma è stata acquisita.
Queste azioni devono essere implementate nel gestore OnTouchListner dell'oggetto ImageView. Per fare ciò, sovrascriveremo il metodo onTouch:
@Override public boolean onTouch(View view, MotionEvent motionEvent) ( if (motionEvent. getAction() == MotionEvent. ACTION_DOWN) ( ClipData clipData= ClipData. newPlainText("" , "" ) ; View. DragShadowBuilder dsb= new View. DragShadowBuilder (view) ;view.startDrag(clipData, dsb, view, 0 ) ;view.setVisibility(View.INVISIBLE) ; return true ; ) else ( return false ; ) )Tutto è molto semplice. Quindi, con la sostituzione dell'immagine decisa, passiamo al compito successivo.
Limitazione dell'area di trascinamento per la funzione di trascinamento
La limitazione dell'area di trascinamento è correlata a un problema. Il fatto è che se rilasci la forma all'esterno della scheda, l'evento di rilascio non si verificherà, perché l'utente ha lasciato cadere l'oggetto in un luogo vuoto e l'oggetto non ha nulla con cui interagire. Di conseguenza, la figura non tornerà al suo stato originale e rimarrà nascosta per sempre. Ho passato molto tempo a leggere la documentazione, ma non ho trovato un modo per limitare l'area di trascinamento degli oggetti. La rivelazione è arrivata all'improvviso. Non ho bisogno di limitare affatto l'area, ho bisogno di sapere se l'utente ha rilasciato la figura correttamente o meno.
Determinazione del rilascio corretto
Ho trovato le risposte alle mie domande nella sezione "Gestione degli eventi di trascinamento" sul sito degli sviluppatori Android. Ecco alcuni punti chiave:
- Quando l'utente termina il trascinamento, l'evento ACTION_DRAG_ENDED viene attivato nel gestore DragListeners.
- In DragListener, puoi ottenere informazioni più dettagliate sull'operazione di trascinamento chiamando il metodo DragEvent.getResult().
- Se DragListener restituisce true in risposta a un evento ACTION_DROP, anche la chiamata getResult restituirà true, altrimenti restituirà false.
Quindi ho bisogno di catturare l'evento ACTION_DRAG_ENDED e chiamare il metodo getResult. Se restituisce false, l'utente ha trascinato la forma fuori dal tabellone e devo rendere visibile ImageView.
@Override public boolean onDrag(View view, DragEvent dragEvent) ( int dragAction= dragEvent. getAction() ; View dragView= (View) dragEvent. getLocalState() ; if (dragAction== DragEvent. ACTION_DRAG_EXITED) ( contiene Dragable= false ; ) else if (dragAction== DragEvent. ACTION_DRAG_ENTERED) ( contieneDragable= true ; ) else if (dragAction== DragEvent. ACTION_DRAG_ENDED) ( if (dropEventNotHandled(dragEvent) ) ( dragView. setVisibility(View. VISIBLE) ; ) ) else if (dragAction= = DragEvent. ACTION_DROP& amp;& amp; ) ; )Ora l'utente può rilasciare la figura ovunque e non accadrà nulla di terribile.
Determinazione delle mosse consentite
L'ultima parte dell'articolo è dedicata alla verifica della validità della mossa che l'utente sta cercando di fare. Prima di discutere questo argomento in dettaglio, farò una piccola osservazione che spiega la struttura della mia domanda. La scacchiera è rappresentata come TableLayout e ogni cella è un discendente di LinearLayout e dispone di un OnDragListener.
Inoltre, ogni OnDragListener fa riferimento a un oggetto "mediatore", che si occupa dell'interazione degli oggetti di gioco e ricorda la posizione della cella corrente.
Quando l'utente trascina una forma su una cella, sono possibili le seguenti azioni:
- Utilizzo dell'evento ACTION_DRAG_ENTERED per impostare la variabile 'containsDraggable' su true.
- Utilizzo dell'evento ACTION_DRAG_EXITED per impostare la variabile 'containsDraggable' su false.
- Utilizzo dell'evento ACTION_DROP per interrogare il middleware se è consentito posizionare una forma in questa cella.
Di seguito è riportato il codice che implementa la logica descritta
@Override public boolean onDrag(View view, DragEvent dragEvent) ( int dragAction= dragEvent. getAction() ; View dragView= (View) dragEvent. getLocalState() ; if (dragAction== DragEvent. ACTION_DRAG_EXITED) ( contiene Dragable= false ; ) else if (dragAction== DragEvent. ACTION_DRAG_ENTERED) ( contieneDragable= true ; ) else if (dragAction== DragEvent. ACTION_DRAG_ENDED) ( if (dropEventNotHandled(dragEvent) ) ( dragView. setVisibility(View. VISIBLE) ; ) ) else if (dragAction= = DragEvent.ACTION_DROP& amp;& amp; contieneDragable) ( checkForValidMove((ChessBoardSquareLayoutView) view, dragView) ; dragView. setVisibility(View. VISIBLE) ; ) return true ; )Come puoi vedere, indipendentemente dal fatto che lo spostamento sia valido o meno, ImageView è impostato sullo stato visibile. Volevo che l'utente vedesse la forma muoversi. In precedenza ho detto che la cella è figlia di LayoutView. Questo viene fatto per semplificare lo spostamento di ImageView da una cella all'altra. Di seguito è riportato il codice per il metodo checkForValidMove, che mostra come viene spostato ImageView.
private void checkForValidMove(ChessBoardSquareLayoutView view, View dragView) ( if (mediator. isValidMove(view) ) ( ViewGroup owner= (ViewGroup) dragView. getParent() ; owner. removeView(dragView) ; view. addView(dragView) ; view. setGravity (Gravity.CENTER) ;view.showAsLanded();mediator.handleMove(view) ; ) )Spero che questo articolo ti aiuti nello sviluppo dei tuoi progetti.
Uso della tecnologia trascinare e rilasciare (trascinare e rilasciare) consente all'utente di spostare vari oggetti da uno all'altro, ad esempio elementi di un elenco all'altro. Per fare ciò, è necessario utilizzare due controlli: un sink e una sorgente. Il ricevitore è l'oggetto che riceverà l'oggetto sorgente (oggetto mobile).
Gli eventi che si verificano durante il movimento degli oggetti sono elencati di seguito nell'ordine in cui si verificano.
OnStartTrascina(digitare TStartDragEvent) - generato dall'oggetto di origine all'inizio dell'operazione. Parametri passati al gestore eventi: oggetto ricevitore DragObject (tipo TDragObject), oggetto sorgente (tipo TObject).
OnDragOver(digitare TDragOverEvent) - crea un oggetto di destinazione quando un oggetto mobile viene posizionato sopra di esso. Parametri passati al gestore eventi: Oggetto mittente mittente (tipo TObject), Oggetto sorgente sorgente (tipo TObject), Stato movimento stato (tipo TDragState), X e Y (tipo intero) - coordinate correnti del puntatore del mouse, Accept (tipo booleano ) segno di conferma dell'operazione di trasloco. Lo stato di movimento rende chiaro se l'oggetto in movimento si trova nell'area del ricevitore, se si muove in essa, se l'ha lasciato. I parametri passati consentono all'oggetto ricevente di accettare o rifiutare l'oggetto di origine. Il parametro Accept è impostato su Trye se l'operazione di spostamento viene accettata, su False in caso contrario.
onDragDrop (tipo TDragDropEvent) - Generato dall'oggetto di destinazione quando l'oggetto trascinato viene rilasciato su di esso. Al gestore dell'evento vengono passate le coordinate correnti del puntatore del mouse, l'oggetto ricevitore Sender (tipo TObject) e l'oggetto movimento Source originale (tipo TObject).
onEndDrag (tipo EndDragEvent) - Generato al termine di un'operazione di trascinamento. Le coordinate X e Y del punto in cui l'oggetto sorgente Sender e l'oggetto destinatario Destinazione vengono passati al gestore eventi.
Per creare un drag and drop è sufficiente implementare due eventi: OnDragDrop e OnDragOver con la proprietà DragMode impostata su dmAutomatic. In caso contrario, l'inizio dell'operazione di spostamento, il metodo BeginDrag, deve essere codificato dal programmatore.
Per consolidare il materiale, creeremo la seguente applicazione. Posizionare un componente Pannello nel modulo. Imposta la proprietà DragMode di Controllo oggetti su dmAutomatic. Seleziona l'oggetto modulo e utilizza la finestra di ispezione Oggetti per creare i seguenti eventi:
Procedura TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); inizia se Sorgente = Pannello1 quindi Accetta:= Vero altrimenti Accetta:= Falso; fine; procedura TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer); beginPanel1.Left:=X; Pannello1.Alto:=Y; fine;
Ora, eseguendo l'applicazione e premendo il pulsante del mouse sul pannello, possiamo spostare l'oggetto pannello in tutto il modulo.
Conclusione: abbiamo conosciuto la tecnologia trascinare e rilasciare(trascina e rilascia) e l'ho usato in pratica.
Da molto tempo esistono funzioni JavaScript che ci consentono di creare interfacce drag & drop. Ma nessuna di queste implementazioni è nativa per il browser HTML5 ha il suo modo di creare interfacce drag & drop (con un piccolo aiuto da JavaScript). In questo articolo vi spiegheremo come ottenerlo...
Supporto browser
Il trascinamento della selezione HTML5 è attualmente supportato da tutti i principali browser desktop (incluso IE (anche IE 5.5 ha un supporto parziale)), ma non è supportato da nessuno dei browser mobili più diffusi.
Eventi Drag&Drop
In ogni fase del drag & drop, vengono attivati vari eventi per far sapere al browser quale codice JavaScript eseguire. Elenco degli eventi:
- dragStart: attivato quando l'utente inizia a trascinare gli elementi;
- dragEnter: attivato quando l'elemento trascinato viene prima trascinato sull'elemento di destinazione;
- dragOver: attivato quando il mouse si sposta su un elemento mentre è in corso un trascinamento;
- dragLeave: attivato se il cursore dell'utente lascia l'elemento durante il trascinamento;
- drag: attivato ogni volta che spostiamo il mouse mentre trasciniamo il nostro elemento;
- drop: attivato quando viene eseguito il drop effettivo;
- dragEnd: attivato quando l'utente rilascia il pulsante del mouse durante il trascinamento di un oggetto.
Con tutti questi listener di eventi, hai molto controllo su come funzionerà l'interfaccia.
oggetto trasferimento dati
È qui che avviene tutta la magia del drag&drop. Questo oggetto contiene i dati inviati dall'operazione di trascinamento. I dati possono essere impostati e recuperati diversi modi, i più importanti dei quali sono:
- dataTransfer.effectAllowed=value: Restituisce i tipi di azione consentiti, i valori possibili sono nessuno, copy, copyLink, copyMove, link, linkMove, move, all e uninitialized.
- dataTransfer.setData(format, data): aggiunge dati e formato specifici.
- dataTransfer.clearData(format): cancella tutti i dati per un formato specifico.
- dataTransfer.setDragImage(element, x, y): imposta l'immagine che vuoi trascinare, i valori xey indicano dove dovrebbe essere il cursore del mouse (0, 0 lo posizionerà in alto a sinistra).
- data = dataTransfer.getData(format) : come suggerisce il nome, restituisce i dati per un formato particolare.
Creazione di un esempio di trascinamento della selezione
Ora inizieremo a creare un semplice esempio di trascinamento della selezione. Come puoi vedere abbiamo due div piccoli e uno grande, possiamo trascinare i div piccoli all'interno di quello grande e persino spostarli indietro.
Trascinando un oggetto
La prima cosa che dobbiamo fare è creare l'HTML. Rendiamo i div trascinabili con l'attributo trascinabile:
Una volta fatto, dobbiamo definire una funzione JavaScript che si attiverà non appena iniziamo a spostare questo elemento:
Funzione dragStart(ev) ( ev.dataTransfer.effectAllowed="move"; ev.dataTransfer.setData("Text", ev.target.getAttribute("id")); ev.dataTransfer.setDragImage(ev.target,100,100) ; restituisce vero; )
In questo codice, dichiariamo prima il tipo di effetto che stiamo consentendo nell'operazione e lo impostiamo in modo che si muova. Nella seconda riga, impostiamo i dati con cui lavorare, dove il testo sarà Testo e il valore sarà l'ID dell'elemento che stiamo trascinando. Successivamente, utilizziamo il metodo setDragImage, che imposterà ciò che trascineremo e quindi dove si troverà il cursore durante il trascinamento, e poiché i cubi sono 200 per 200 pixel, lo abbiamo posizionato proprio al centro. Alla fine, torniamo indietro true.
Lascia cadere l'oggetto
Affinché un elemento accetti un rilascio, deve essere in ascolto di 3 eventi diversi: dragEnter, dragOver e l'evento di rilascio. Quindi aggiungiamo questo al nostro div HTML5 con ID grande:
funzione dragEnter(ev) ( ev.preventDefault(); restituisce true; ) funzione dragOver(ev) ( ev.preventDefault(); )
Nella prima funzione, definiamo cosa dovrebbe accadere quando l'elemento che stiamo trascinando raggiunge l'elemento desiderato dove dovrebbe verificarsi il rilascio, in questo caso stiamo solo impedendo il comportamento predefinito del browser. Successivamente, nella funzione dragOver, non consentiamo semplicemente che il rilascio avvenga per impostazione predefinita.
Nella parte successiva, definiamo una funzione per quando un elemento viene "lanciato" sul target desiderato:
Funzione dragDrop(ev) ( var data = ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); ev.stopPropagation(); return false; )
In quest'ultima parte, impostiamo prima la variabile data in cui otteniamo tutti i dati disponibili per il formato testo, quindi aggiungiamo i dati al div in cui vogliamo rilasciare l'elemento.
Rendi la sezione di rilascio un obiettivo
La demo mostra che due div possono essere riposizionati. Fortunatamente, aggiungere un altro obiettivo di rilascio è molto più semplice di quanto potresti pensare. Perché abbiamo già queste funzioni e tutto ciò che dobbiamo fare è aggiungere listener di eventi:
E questo è tutto ciò che serve per consentire al div di essere trascinato di nuovo in posizione.
Ci sono molte applicazioni drag&drop che sono costruite usando librerie JavaScript e sono spesso più facili da usare. Ma speriamo che in questa tecnica HTML5 e JavaScript vedrai il potenziale futuro per risolvere i tuoi problemi.
Le tecniche di trascinamento della selezione si sono evolute nel corso degli anni. Non sorprende che con l'aumento del numero di programmatori che sviluppano plug-in con open codice sorgente(ad es. per jQuery) i vecchi metodi vengono resuscitati. La libreria JavaScript è altamente adattiva e offre molti miglioramenti in questa era della tecnologia web.
In questo tutorial, creeremo uno script che possiamo utilizzare per creare rettangoli dinamici drag and drop sul nostro sito Web. Il processo è controllato da jQuery. Tali script fanno risparmiare tempo fornendo funzionalità già pronte! E la libreria drag and drop può essere utilizzata in altri progetti.
Prepariamo i contenuti
Prima di tutto, prepareremo un piccolo sito web per il progetto. Nella cartella del progetto, devi creare due directory con nomi degni di nota "js" e "css" e file vuoto indice.html . Il codice sarà molto semplice in modo che ci sia un'idea chiara del lavoro e ci sia un punto per ulteriori sviluppi.
Di seguito il codice del ns File HTML. Nel capitolo testa includiamo 3 script. Lo script jQuery principale verrà caricato dal server di Google Code. è incluso anche il nostro file style.css, che contiene le proprietà principali per la formatura aspetto esteriore il nostro documento.
trascinami
Posso essere trascinato anch'io
P.S. Puoi lasciarmi ovunque!