Artículos
DOM

Hacer foco en un elemento sin scroll

29/Oct/2023

Cuando hacemos un foco sobre un elemento de la página, el navegador, busca el elemento del foco y se posiciona sobre él realizando un scroll sobre el documento si el elemento no está dentro del área actual. Pero, cómo podemos diseñar nuestra web si queremos hacer foco en un elemento sin scroll, es decir, posicionarnos en el elemento sin que el navegador mueva el scroll. La idea es no generar una sensación de cambio al usuario por el mero hecho de hacer foco sobre un elemento. Para ello vamos a utilizar algo de Javascript y métodos del DOM.

Lo primero será construir una página web que tenga muchos elementos. El primero será un botón que nos ayude a simular el foco sobre un elemento y que crearemos mediante un elemento button, luego crearemos muchos saltos de línea mediante un elemento br y por último crearemos, mediante un elemento form, un formulario con los elementos sobre los que haremos foco.

Veamos el código que representa esto:

<h1>Foco sin Scroll</h1>
  
<button id="hacerFoco">Hacer Foco Sin Scroll</button>

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

<form id="myform">
	<label for="nombre">Nombre: </label>
	<input type="text" id="nombre"/>
</form>

Ahora vamos a generar el foco sobre el campo del formulario. Para ello tenemos que registrar un evento sobre el botón utilizando un método .addEventListener()

let boton = document.getElementById("hacerFoco");
boton.addEventListener("click", function() { ... });

Este evento disparará el lanzar un foco sobre el campo de texto. Para poder hacer foco sobre dicho elemento simplemente tendremos que ejecutar el método .focus(). Así que utilizamos el método .getDocumentById() para obtener acceso al campo y ya sobre él ejecutamos el método .focus().

let boton = document.getElementById("hacerFoco");
boton.addEventListener("click", function() {
  let campo = document.getElementById("nombre");
  campo.focus();
});

Si bien, el método .focus(), si no le decimos nada, hace el scroll sobre la página. Así que tenemos que echar un ojo a su sintaxis:

Element.focus(options)

En estas opciones tenemos dos valores, por un lado preventScroll que nos permite evitar ejecutar el scroll y que será lo que utilicemos para nuestro ejemplo y focusVisible para decidir si se muestra o no la marca visible sobre el elemento al que hacemos foco.

Por lo tanto el código con la propiedad preventScroll con un valor true quedará de la siguiente forma:

let boton = document.getElementById("hacerFoco");
boton.addEventListener("click", function() {
  let campo = document.getElementById("nombre");
  campo.focus({preventScroll: true});
});

Así ya podremos posicionarnos en el elemento sin que el navegador mueva el scroll con este sencillo código Javascript que manipula los métodos del DOM.

Código Fuente

Descárgate el código fuente de Hacer foco en un elemento sin scroll
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star
Hacer foco en un elemento sin scroll
Suscribir
Notificar de
guest
0 Comentarios
Opiniones integradas
Ver todos los comentarios