Qualsiasi suggerimento è molto apprezzato.Come rendere selezionabile il testo su tela?
risposta
La selezione del testo ha molte componenti, alcune visive, alcune non visive.
Per prima cosa, rendere selezionabile il testo è necessario conservare una matrice, di dove si trova il testo, di che testo si tratta e di quale tipo di carattere è stato utilizzato. Utilizzerai queste informazioni con la funzione Canvas measureText.
Utilizzando measureText, con la stringa di testo, è possibile identificare su quale lettera deve essere posizionato il cursore quando si fa clic su un'immagine.
ctx.fillText("My String", 100, 100);
textWidth = ctx.measureText("My String").width;
si avrà ancora per analizzare l'altezza dei caratteri dalla proprietà "font", in quanto non è attualmente incluso nel metriche del testo. Il testo della tela è allineato alla baseline per impostazione predefinita.
Con queste informazioni, ora si dispone di un riquadro di delimitazione, che è possibile verificare. Se il cursore si trova all'interno del riquadro di delimitazione, ora si ha lo spiacevole compito di dedurre quale lettera è stata intenzionalmente selezionata; dove deve essere posizionato l'inizio del cursore. Ciò può comportare la chiamata di measureText diverse volte.
A quel punto si sa dove deve andare il cursore; è necessario memorizzare la stringa di testo come stringa di testo, in una variabile, ovviamente.
Dopo aver definito i punti di inizio e fine dell'intervallo, è necessario disegnare un indicatore di selezione. Questo può essere fatto in un nuovo livello (un secondo elemento canvas), o disegnando un rettangolo usando la modalità di composizione XOR.Può anche essere fatto da semplicemente cancellando e ridisegnando il testo sopra un rettangolo pieno.
Tutto sommato, la selezione del testo e la modifica del testo in Canvas sono piuttosto laboriosi da programmare, e sarebbe saggio riutilizzare i componenti già scritti, essendo Bespin un eccellente esempio.
Modificherò il mio post se dovessi trovare altri esempi pubblici. Credo che Bespin usi un metodo di selezione basato sulla griglia, che potrebbe richiedere un font monospaced. Legature, crenatura, bidirezionalità e altre funzioni avanzate di rendering dei caratteri richiedono una programmazione aggiuntiva; è un problema complesso
Sì, Bespin richiede un font a spaziatura fissa. – devongovett
canvas è solo una superficie di disegno. Si esegue il rendering e il risultato è pixel. Quindi, dovresti tenere traccia delle posizioni di tutto il testo che hai reso sull'area di disegno in una sorta di struttura dati che elaboreresti durante gli eventi del mouse.
Se è necessario disporre di testo selezionabile, sarebbe molto più semplice creare un div o qualsiasi altro e posizionarlo sopra l'area di disegno in cui si desidera visualizzare il testo.
canvas non dispone di alcun meccanismo incorporato per la selezione del testo, quindi è necessario eseguire il rendering del testo e selezionare il codice, che può essere piuttosto complicato per essere corretto.
non è possibile selezionare il testo disegnato negli elementi canvas, a causa della natura del tag canvas. Ma ci sono alcune soluzioni alternative, come quella utilizzata in typefaceJS.
Un'altra soluzione potrebbe essere quella di aggiungere testo con elementi div posizionati invece di usare strokeText o fillText.
È possibile ottenere alcune idee da Bespin.
hanno implementato un editor di testo in JavaScript utilizzando tela con la selezione del testo, barre di scorrimento, cursore lampeggiante, ecc
Nel frattempo, Bespin è stato sostituito da SkyWriter, che è inattivo e [è stato fuso in Ace] (https://mozillalabs.com/en-US/skywriter/). –
Il progetto è inattivo. – Pacerier
Una risposta semplice potrebbe essere: o utilizzare HTML o SVG al posto di tele . A meno che tu non abbia davvero bisogno del livello di controllo del livello inferiore delle offerte di canvas.
FabricJS ora ha la capacità di interagire con oggetti esterni all'elemento canvas, ad esempio this demo mostra un pulsante collegato a un'immagine caricata in un elemento canvas.
Lo stesso approccio può essere utilizzato in altre librerie come Raphael agganciare qualsiasi evento di spostamento, ottenere il riquadro di delimitazione dell'elemento e riposizionare l'elemento HTML.
Suggerisco di utilizzare la libreria EaselJS, è possibile aggiungere ogni lettera come un bambino e persino aggiungere eventi del mouse a quell'oggetto, è una libreria incredibile, vai a dare un'occhiata!
- 1. Come rendere UIView selezionabile
- 2. Come rendere gli oggetti su tela non selezionabili?
- 3. come rendere uitableviewcell non selezionabile
- 4. Come rendere bitmap su tela in WPF?
- 5. Testo errato su tela
- 6. Come rendere una casella di testo non selezionabile utilizzando C#
- 7. Come rendere UITableView Header selezionabile?
- 8. Come rendere un indirizzo e-mail selezionabile?
- 9. Come impostare il testo predefinito non selezionabile su QComboBox?
- 10. Mantieni il testo centrato verticalmente su tela
- 11. Come disegnare un testo su tela?
- 12. HTML: rendere il campo di input selezionabile ma non modificabile
- 13. Come disegnare il testo in corsivo su tela Android?
- 14. Come posso rendere selezionabile una casella immagine?
- 15. Come rendere UIImageView sullo storyboard selezionabile (rapido)
- 16. Testo PhantomJS 2.0 non selezionabile durante il rendering su PDF
- 17. Come rendere il testo "trasparente"?
- 18. Come rendere i punti cliccabili nella tela html5?
- 19. Come rendere qualsiasi vista per disegnare su tela?
- 20. testo grande con anti-aliasing su tela
- 21. Disegna testo su tela ad angolo
- 22. Come rendere una parte del testo selezionabile come pulsante in Android?
- 23. misurazione del testo su tela in scala
- 24. Come rendere non selezionabile la data passata in fullcalendar?
- 25. Avvolgere testo lungo su una tela Android
- 26. Come rendere la tela ridimensionabile in javaFX?
- 27. Rendere selezionabile il contenuto della griglia ExtJS 4
- 28. WPF: come rendere il ridimensionamento automatico della tela?
- 29. Come rendere selezionabile un tag di ancoraggio vuoto in IE7?
- 30. Fare in modo che il rendering del testo su tela di Firefox sia lo stesso del testo CSS
Poiché le risposte hanno quasi 3 anni, ci sono altre soluzioni o librerie pronte all'uso che possono essere utilizzate? – Cybrix
@Cybrix - sì vedere la mia risposta sotto – Neil