É possível evitar a rolagem documento quando seta teclas são pressionadas?
-
06-09-2019 - |
Pergunta
Muito simples:
É possível evitar que o navegador rolagem quando um usuário pressionou as setas?
Solução
Muito simples:. Sim, mas não fazê-lo
Alterar operação fundamental de como um navegador opera apenas confunde ou Angers usuários, e faz com que toda a experiência menos user-friendly. O usuário deve ter o controle final do caminho as suas funções de navegador, não você. Isto é semelhante ao bloqueio de itens de menu de ser acessado, ou removendo contexto menus etc.
Outras dicas
Sim. usar algo como: document.getElementById ( 'yourID') onkeypress = HandleKeyPress;.
function HandleKeyPress(e) {
var e = e || window.event;
switch (e.keyCode) {
case e.DOM_VK_LEFT:
case e.DOM_VK_RIGHT:
case e.DOM_VK_UP:
case e.DOM_VK_DOWN:
if (e.preventDefault)
e.preventDefault();
else e.returnValue = false;
}
}
Embora possa não ser uma boa idéia para fazê-lo. apenas a certeza de que você não está com vista para uma melhor abordagem.
Parece muitos estão dizendo para não quebrar o que o navegador faz.
Eu diria o mesmo, a menos que você está substituindo-o por uma funcionalidade semelhante ou melhor.
Eu freqüentemente matar a rolagem do teclado em elementos com um estouro, porque eu adicionei um evento de teclado para o elemento onde o uso do teclado "para baixo" e "para cima" chaves seleciona os itens (pense em um localizador ou o Windows Explorer janela) .
O pergaminho padrão feita a interação tudo whacky. Se o item do topo foram selecionados, então você tecla 'para baixo', que iria selecionar o próximo item, mas em seguida, role o elemento para baixo e esconder o que estava selecionado.
Então eu quebrar a rolagem padrão, e depois adicionar o meu próprio para se deslocar para o item selecionado se estiver abaixo (ou acima) da vista de rolagem atual. Dessa forma, ele se comporta exatamente como qualquer sistema operacional lá fora quando a chave-ing cima e para baixo através de arquivos.
Apenas dizendo, quebrá-lo o quanto quiser, mas certifique-se que você sabe por que você está quebrando-o e o usuário não percebe nada.
em jQuery você pode fazer:
$().keydown(function(e) { return e.keyCode != 38 && e.keyCode != 40; });
Provavelmente, mas não é geralmente uma boa idéia para quebrar uma convenção que todo mundo sabe e entende: D
ouvir o evento keydown e prevenir o comportamento padrão.
Em jQuery
$(document).on('keydown.yournamespace', function(e) {e.preventDefault();});
Em JQuery
$("*").keypress(function(e){e.preventDefault(); return false;});