Ahí está el caso onhashchange
, pero no se puede cancelar de forma fiable a través de navegadores para evitar el desplazamiento. La mejor solución es registrar la posición de desplazamiento antes de cambiar la ubicación de hash y restablecerla después. Por ejemplo, el siguiente código se captura un clic en cualquier enlace - que no se detiene la propagación - con un valor de href #
y evitar que la página de desplazamiento vertical:
document.onclick = function (evt) {
var tgt = (evt && evt.target) || event.srcElement,
scr = document.body.scrollTop;
if (tgt.tagName == "A" && tgt.href.slice(-1) == "#") {
window.location.href = "#";
document.body.scrollTop = scr;
return false;
}
}
Si va a modificar el hash a través secuencia de comandos, puede utilizar el siguiente código:
var scr = document.body.scrollTop;
window.location.href = '#';
document.body.scrollTop = scr;
Cualquiera de estos métodos puede ser regulada para evitar el desplazamiento de elementos individuales o el desplazamiento horizontal de la página. Tenga en cuenta que puederemove the entire hash (incluido el #
) sin causar navegación o desplazamiento en navegadores modernos llamando a las funciones pushState
o replaceState
.
podría asignar un no-existente de anclaje, pero eso no es verdad "limpieza" de la URL arriba: D ... – polarblau