Skip to content
Snippets Groups Projects
Commit 1080c014 authored by jojohoch's avatar jojohoch
Browse files

[player] Fix scroll position of input element when opening keyboard

- Use done event of keyboard animation to set the scroll position
of the element
- In small browser views elements are scrolled to the top of the view
instead of the middle of the view
parent 9aa4acf9
No related branches found
No related tags found
No related merge requests found
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
<aspect-keyboard <aspect-keyboard
*ngIf="keyboardService.isOpen" *ngIf="keyboardService.isOpen"
@keyboardSlideInOut @keyboardSlideInOut
(@keyboardSlideInOut.done)="keyboardService.scrollElement()"
[showFrenchCharacters]="keyboardService.elementComponent.elementModel.softwareKeyboardShowFrench" [showFrenchCharacters]="keyboardService.elementComponent.elementModel.softwareKeyboardShowFrench"
(keyClicked)="keyboardService.enterKey($event)" (keyClicked)="keyboardService.enterKey($event)"
(backspaceClicked)="keyboardService.deleteCharacters(true)"> (backspaceClicked)="keyboardService.deleteCharacters(true)">
......
...@@ -27,20 +27,26 @@ export class KeyboardService extends InputService { ...@@ -27,20 +27,26 @@ export class KeyboardService extends InputService {
elementComponent: TextAreaComponent | TextFieldComponent | TextFieldSimpleComponent | SpellCorrectComponent): elementComponent: TextAreaComponent | TextFieldComponent | TextFieldSimpleComponent | SpellCorrectComponent):
void { void {
this.alternativeKeyboardShowFrench = elementComponent.elementModel.softwareKeyboardShowFrench; this.alternativeKeyboardShowFrench = elementComponent.elementModel.softwareKeyboardShowFrench;
this.scrollElement(inputElement);
this.setCurrentKeyInputElement(inputElement, elementComponent); this.setCurrentKeyInputElement(inputElement, elementComponent);
this.isOpen = true; this.isOpen = true;
} }
private scrollElement = (element: HTMLElement): void => { scrollElement(): void {
if (this.isHiddenByKeyboard(element)) { if (this.isOpen && this.isElementHiddenByKeyboard()) {
setTimeout(() => { const scrollPositionTarget = this.isViewHighEnoughToCenterElement() ? 'start' : 'center';
element.scrollIntoView({ behavior: 'smooth', block: 'center' }); this.elementComponent.domElement.scrollIntoView({ block: scrollPositionTarget });
}, 200);
} }
}; }
private isViewHighEnoughToCenterElement(): boolean {
return window.innerHeight < this.getKeyboardHeight() * 2;
}
private isHiddenByKeyboard = (element: HTMLElement): boolean => ( private isElementHiddenByKeyboard(): boolean {
window.innerHeight - element.getBoundingClientRect().top < 300 return window.innerHeight - this.elementComponent.domElement.getBoundingClientRect().top < this.getKeyboardHeight();
); }
private getKeyboardHeight(): number {
return this.alternativeKeyboardShowFrench ? 400 : 350;
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment