Да, это возможно с javascript.
Основной частью выделения является Диапазон объекта. Если мы можем определить диапазон, мы можем определить выбор. Чтобы определить диапазон, нам нужны свойства startContainer
, startOffset
, endContainer
и endOffset
.
Идея выбора «Android» следующая: когда мышь не работает - запомните контейнер и смещение, при котором пользователь щелкнул (мы можем сделать это быстро с document.caretPositionFromPoint
или document.caretRangeFromPoint
в зависимости от браузера). Когда мышь движется или вверх - запомните второй контейнер и смещение. Таким образом, в каждый момент у нас есть контейнер start
и end
и смещение, чтобы мы могли создать выделение:
var range = document.createRange();
range.setStart(start.container, start.offset);
range.setEnd(end.container, end.offset);
var selection = document.getSelection();
selection.addRange(range);
Затем, когда мышь снова нажата, мы можем проверить, нажал ли пользователь в начале или в конце выделения, и в зависимости от этой информации мы можем «заморозить» начальную или конечную точку и переместить другую. Под «переместить другой» я подразумеваю воссоздание диапазона выбора.
Я реализовал эту идею здесь https://jsfiddle.net/uvaf36gh/. Надеюсь, она вам поможет!