1234567891011121314151617181920212223242526272829303132333435363738394041 |
- function getCaretPosition(element: HTMLInputElement | HTMLTextAreaElement, x: number, y: number) {
- const text = element.childNodes[0]
- const range = element.ownerDocument.createRange();
- const start = 0;
- const end = element.value.length;
- let caretPosition = start;
- range.setStart(text, 0);
- range.setEnd(text, end);
- range.setStart(text, 0);
- for (let i = start; i <= end; i++) {
- range.setEnd(text, i);
- console.log(range.getBoundingClientRect())
- if (range.getBoundingClientRect().left >= x && range.getBoundingClientRect().top >= y) {
- caretPosition = i;
- break;
- }
- }
- return caretPosition;
- }
- function setCaretPosition(element: any, position: number) {
- element.focus();
- if (element.setSelectionRange) {
- element.setSelectionRange(position, position);
- } else if (element.createTextRange) {
- const range = element.createTextRange();
- range.collapse(true);
- range.moveEnd('character', position);
- range.moveStart('character', position);
- range.select();
- }
- }
- export const focusToMouse = (element: HTMLInputElement | HTMLTextAreaElement, event: MouseEvent) => {
- const caretPosition = getCaretPosition(element, event.clientX, event.clientY);
- setCaretPosition(element, caretPosition);
- }
|