Показать сообщение отдельно
  #3 (permalink)  
Старый 30.09.2015, 23:59
Профессор
Отправить личное сообщение для ТОТ_САМЫЙ Посмотреть профиль Найти все сообщения от ТОТ_САМЫЙ
 
Регистрация: 10.09.2015
Сообщений: 184

В итоге я написал работающий класс который сохраняет как обычное так и реверсивное выделение:

class Selection

	constructor: ->
		@anchorNode = null
		@anchorOffset = null
		@focusNode = null
		@focusOffset = null


	clear: ->
		@anchorNode = null
		@anchorOffset = null
		@focusNode = null
		@focusOffset = null


	save: ->
		selection = window.getSelection()
		@anchorNode = selection.anchorNode
		@anchorOffset = selection.anchorOffset
		@focusNode = selection.focusNode
		@focusOffset = selection.focusOffset
		return


	restore: ->
		selection = window.getSelection()
		selection.removeAllRanges()
		unless @anchorNode then return
		range = document.createRange()
		range.setStart(@anchorNode, @anchorOffset)
		selection.addRange(range)
		selection.extend(@focusNode, @focusOffset)
		return


В итоге мы ренджи не трогаем, мы у селекшена запоминаем стартовую и конечную точки, а потом при ресторе, мы создаем коллапсовый замкнутый рендж задавая ему лишь стартовую точку, и продолжаем (extend) его в нужном направлении до конечной точки, подобное extend заставляет нам сохранить направление выделения. И выделение под курсором не обрывается ^_^

Еще один момент в EDGE такое выделение сбрасывается при любой активности мышкой, по этому щас я добавлю проверку на то нажата ли клафиша мышки или отпущена. И если нажата то буду думать что делать

Последний раз редактировалось ТОТ_САМЫЙ, 01.10.2015 в 00:06.
Ответить с цитированием