Sto emulando l'editor di testo nel mio progetto con il caret personalizzato, ma la selezione nativa. C'è un modo per scoprire in quale direzione l'utente ha selezionato il testo? Diciamo che quell'utente ha selezionato il testo "Ciao mondo". Ci sono due possibilità: potrebbe iniziare facendo clic con il mouse sulla lettera "d" e terminare con la lettera "h", oppure iniziare con la lettera "h" e terminare con la lettera "d". C'è un modo semplice per distinguere tra queste due situazioni? Grazie.Rileva la direzione della selezione utente con javascript
risposta
vecchia questione, ma ho pensato che vorrei aggiungere una soluzione più semplice:
var sel = getSelection(),
position = sel.anchorNode.compareDocumentPosition(sel.focusNode),
backward = false;
// position == 0 if nodes are the same
if (!position && sel.anchorOffset > sel.focusOffset ||
position === Node.DOCUMENT_POSITION_PRECEDING)
backward = true;
Node.compareDocumentPosition (MDN)
Per quanto ne so, non esiste alcuna proprietà o evento nativo per Javascript che indicherà la direzione. This site dettagli su come tenere traccia della direzione del mouse, è possibile modificarlo in base alle proprie esigenze.
In sostanza, fino a quando è possibile recuperare la posizione del mouse (o con loc.pageX
o Y, o event.clientX
o Y), può essere possibile scrivere le proprie funzioni per monitorare la direzione in base alla posizione e il tempo.
Nel tuo caso si sarebbe probabilmente solo desidera acquisire questo quando l'utente ha il testo 'selezionato', vale a dire l'evento mousedown
.
Grazie, ho avuto paura, che dovrò farlo :) – Ondra
E 'possibile. https://stackoverflow.com/a/12652116/96100 –
@TimDown Certo è possibile, e il link che ho fornito ha un approccio. Semplicemente non esiste una funzione/proprietà * nativa * (ad es. Window.mouseDirection) che la fornisce; è necessario creare codice personalizzato, come nel tuo esempio. – Igor
traccia la mousedown X offet e poi compensare il mouseup X, e il risultato indica la direzione: (usando jQuery)
var textSelectionDirection = (function(){
var direction = '', mouseDownOffset = null;
function getDirection(e){
if(e.type == 'mousedown')
mouseDownOffset = e.clientX;
else if(e.type == 'mouseup'){
direction = e.clientX < mouseDownOffset ? 'left' : 'right';
console.log(direction);
}
}
return getDirection
})();
$(document).on('mousedown mouseup', textSelectionDirection);
al momento funziona solo con le selezioni del mouse e non con le tastiere – vsync
Questo dovrebbe funzionare:
function isBackwards(sel) {
var rg = document.createRange();
rg.setStart(sel.anchorNode, sel.anchorOffset);
rg.setEnd(sel.focusNode, sel.focusOffset);
return !rg.toString();
}
Nota: se si consente selezioni di nient'altro che rotture e spazi vuoti, è necessario modificare la funzione precedente dal restituirebbe true
in tal caso, non importa quale.
Non lavorare in un singolo nodo di testo. Funziona solo se il nodo iniziale e quello finale non sono gli stessi. – Jordan
stavo cercando di trovare una soluzione che funziona per me per un paio di giorni. Ecco cosa mi è venuta, questo funziona con la selezione singola gamma:
var selection = window.getSelection();
var range = selection.getRangeAt(0);
var isSelectionDown = selection.focusNode === range.endContainer;
var isSelectionUp = selection.focusNode === range.startContainer;
Il nodo focus della selezione è sempre dove l'utente rilascia il mouse, ma alla fine gamma e iniziare contenitori cambiano a seconda della direzione.
Funziona solo se la selezione si estende su più nodi. Se non è un problema, allora può essere ridotto a: 'var isReverse = selection.anchorNode! == selection.getRangeAt (0) .startContainer; ' – Pocketsand
- 1. rileva la posizione di fine selezione utilizzando javascript
- 2. ios UICollectionView rileva direzione scorrimento
- 3. Rileva la direzione del testo in base al contenuto
- 4. Rileva HTTPS con JavaScript
- 5. Rileva supporto per la transizione con JavaScript
- 6. Rileva layout tastiera con javascript
- 7. Rileva la direzione di UIScrollView scorri in scrollViewWillBeginDragging
- 8. Calcola la posizione iniziale e finale della selezione utente utilizzando javascript da un elemento padre
- 9. FlexSlider con la direzione RTL
- 10. Rileva carattere immesso con JavaScript
- 11. Rileva versione Windows con JavaScript
- 12. jQuery + Jeditable: rileva quando si modifica la selezione
- 13. Javascript per selezionare la prima opzione della lista di selezione
- 14. Widget per schede Javascript con trascinamento della selezione
- 15. Ottieni la direzione di scorrimento utente in UIPageViewController
- 16. Rileva utente tocca notifica locale
- 17. Come posso ottenere la selezione delle funzioni OpenLayers e il trascinamento della selezione Javascript?
- 18. Interfaccia utente ridimensionabile jQuery - direzione dell'operazione
- 19. Android: Rileva input tastiera utente inattività/Rileva (softkeyboard)
- 20. Javascript: Rileva il nodello principale di Caret
- 21. Rilevamento della direzione del gesto di scorrimento con Leap Motion
- 22. Imposta dinamicamente opzioni di selezione con JavaScript
- 23. Posso usare Javascript per ottenere la direzione della bussola per iOS e Android?
- 24. Rileva numeri o lettere con jquery/javascript?
- 25. DataGridView cattura selezione riga utente
- 26. Come trovare la direzione del pizzico in javascript?
- 27. Rileva il cambiamento delle schede del browser con javascript
- 28. Rileva adblock e javascript
- 29. Rileva versione di JavaScript
- 30. Inserimento di tag personalizzati nella selezione utente
Non penso che l'oggetto di selezione sia abbastanza intelligente per questo. Dovresti registrare le posizioni del mouse e scoprirlo da solo. –
@Diodeus Fai una risposta in modo che possa accettarla. E (at) OP Prova e aggiungi un setter e getter personalizzati per quelle azioni usando i valori predefiniti e aggiungendo anche i calcoli sulla posizione del mouse. – Relic
È possibile. https://stackoverflow.com/a/12652116/96100 –