-
-
Notifications
You must be signed in to change notification settings - Fork 2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Переход курсора на следующий и предыдущий блоки при нажатии на кнопки вверх/вниз #32
Conversation
|
||
cEditor.nodes.redactor.addEventListener('pointerdown', function(event) { | ||
console.log('here'); | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Лишнее
Нужно сделать переходы между блоками на "влево" и "вправо" в начале и в конце блока соответственно. |
Боюсь, что события, зависящие от кейап и кейдаун, перехватываются по завершении выполнения стандартных действий. То есть если я нахожусь в начале последней строки и нажимаю "вниз", то каретка сначала улетит в конец строки, а потом выполнится команда перехода в новый блок. |
return ; | ||
} | ||
|
||
/* Get parents until we didn't find nextSibling to switch caret */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
все равно не понимаю этого блока. Опиши комментарий подробнее
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Когда мы нажимали стрелку "вниз", каретка перемещалась в конец узла. А функция, которая переносит каретку в другой блок, вызывается при KeyUp (Он был уже прописан - globalKeyUp). Поэтому каретка перемещается в конец узла, а в KeyUp проверяется, если каретка в конце узла и дальше ничего нет, "перепрыгнуть" на другой блок. То есть, когда мы в начале последнего узла и нажимаем на кнопку "вниз", мы видим как каретка перемещается в конец узла, а потом перемещается на другой блок. Поэтому прописал дополнительный if, который смотрит, если каретка не в конце узла, мы меняем позицию каретки (caretOffset и FocusedNode) и return;
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
это надо делать в keyDown, чтобы не было конфликтов со стандартным поведением. Плохо когда сперва она в конец перепрыгивает, а когда отпускаешь клавишу — меняется блок
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
То есть, когда мы в начале последнего узла и нажимаем на кнопку "вниз", мы видим как каретка перемещается в конец узла, а потом перемещается на другой блок. Поэтому прописал дополнительный if, который смотрит, если каретка не в конце узла, мы меняем позицию каретки (caretOffset и FocusedNode) и return;
вот это не понятно совсем. Задам вопросы по пунктам
- Когда мы в начале узла нажимаем ВНИЗ — каретка должна просто перейти на следующую строчку. То есть оставляем стандартное поведение.
- Зачем в данной функции focusedElement ?
- Не понятный цикл.
while ( focusedElement.nextSibling == null ) {
focusedElement = focusedElement.parentNode;
}
Если в коде есть какие-то не очевидные алгоритмы, то их лучше выносить в отдельные небольшие функции с понятным названием и комментариями. Тем более этот код у тебя 2 раза дублируется.
Но сперва объясни, что требуется получить. Из твоего кода сейчас следует, что ты пытаешься получить focusedElement
, но он уже есть, и вообще зачем он нужен?
|
||
if (event.keyCode == cEditor.core.keys.DOWN || event.keyCode == cEditor.core.keys.RIGHT ) { | ||
|
||
/** Stop transition when caret is not at the end of Text node |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
почему Stop ? ты ничего не останавливаешь, ты просто не выполняешь переход к следующему блоку
cEditor.content.setToNextSibling( block ); | ||
} | ||
|
||
else if (event.keyCode == cEditor.core.keys.UP || event.keyCode == cEditor.core.keys.LEFT ) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
else if отвалился
|
||
block.addEventListener('keydown', function(event) { | ||
|
||
cEditor.caret.save(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
надо вынести обработчик кейдауна в отдельную функцию, а в ней уже вызывать необходимую логику.
например blockKeydownHandler
Продолжить дебажить изменения каретки
|
||
while ( position ) { | ||
|
||
/** @todo comment */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
напиши тут полноценный комментарий, пока не забыли
closes #25