He configurado keylisteners en Vaadin para usar las teclas de flecha para tareas específicas. Debido a esto, no puedo usar las teclas de flecha para desplazarme por la página, así que configuré los oyentes de teclas en ctrl+flecha para hacer esta función. Ahora actualmente uso una llamada de función JS para hacer el desplazamiento:
window.Scroll = { scroll: function(amount, idOfWrapper){ var element = document.getElementById("container-of-" + idOfWrapper); element.scrollBy({top:amount, behavior: 'smooth'}); }}
El problema que tengo es que esto no me permite desplazarme continuamente por la página, debido al comportamiento de desplazamiento suave (que necesito tener). ¿Cómo podría hacer esto posible?
Código Java:
ShortcutEventListener listener = event -> { ... } else if(event.matches(Key.ARROW_DOWN, KeyModifier.CONTROL)) { UI.getCurrent().getPage().executeJs("Scroll.scroll($0, $1)", scrollAmount, idOfWrapper); } else if(event.matches(Key.ARROW_UP, KeyModifier.CONTROL)) { UI.getCurrent().getPage().executeJs("Scroll.scroll($0, $1)", scrollAmount, idOfWrapper); } }; ... UI.getCurrent().addShortcutListener(listener, Key.ARROW_DOWN, KeyModifier.CONTROL); UI.getCurrent().addShortcutListener(listener, Key.ARROW_UP, KeyModifier.CONTROL);No es una respuesta a su pregunta, sino un consejo amistoso. Quiero señalar que tratar de reproducir el comportamiento de desplazamiento nativo con su propio código conduce a un agujero de conejo profundo que podría resultar en todo tipo de casos extremos y problemas específicos del navegador. Además, cambiar el comportamiento de desplazamiento a la tecla de flecha + modificador es muy poco intuitivo, ningún usuario se dará cuenta de esto.
Si tuviera que admitir el desplazamiento del teclado nativo, no me metería con las teclas de flecha normales. En su lugar, consideraría usar diferentes accesos directos para mi navegación personalizada (por ejemplo, teclas de flecha + modificador). Luego agregue un texto de ayuda al elemento navegable para que los usuarios estén al tanto. Alternativamente, verificaría si los requisitos se pueden cambiar, de modo que los accesos directos solo se activen cuando el usuario haya enfocado el elemento específico que debería admitir la navegación.