javascript - ejemplo - window.location.hash=“”; ¿Evitar el desplazamiento hacia la parte superior?
location hostname javascript (4)
En primer lugar, gracias por sus soluciones: @ Andy-E y @JustMaier.
Sin embargo, tuve un problema para que funcionara según el segundo bloque de código de Andy E en Firefox y el código de JustMaier en Chrome.
Así que hice una combinación de esos dos bloques de código y funciona de la misma manera en ambos navegadores.
var scr = document.body.scrollTop;
window.location.hash = '' '';
document.body.scrollTop = scr;
Mis dos centavos, sin quitarle nada a los verdaderos ninjas de JS, mencionados anteriormente. :)
En mi sitio web configuro la dirección url usando
window.location.hash = ''project_name'';
pero si quiero limpiar la dirección URL de cualquier hash (cuando cierro un proyecto) y configurar
window.location.hash = '''';
sucede que la página se desplaza hasta la página superior
¿Hay alguna manera de limpiar la url sin ningún efecto secundario?
Gracias
Estaba teniendo el mismo problema y vine aquí por una respuesta. Acabo de descubrir que hay una manera muy fácil:
window.location.hash = '' '';
Básicamente, lo estás configurando en ''#'', ya que el espacio no existe, no se mueve. Cuando vuelve a visitar la página, tampoco la trata de manera diferente a solo #
Existe el evento onhashchange
, pero no se puede cancelar de manera confiable en todos los 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 detectará un clic en cualquier enlace, que no detiene la propagación, con un valor href de #
y evitará que la página se desplace verticalmente:
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 está cambiando el hash a través del script, puede usar el siguiente código:
var scr = document.body.scrollTop;
window.location.href = ''#'';
document.body.scrollTop = scr;
Cualquiera de estos métodos se puede ajustar para evitar desplazar elementos individuales o desplazar la página horizontalmente. Tenga en cuenta que puede eliminar todo el hash (incluido el #
) sin provocar la navegación o el desplazamiento en los navegadores modernos llamando a las funciones pushState
o replaceState
.
document.body.scrollTop está en desuso , también las últimas versiones de Chrome parecen ser inestables aquí. Lo siguiente debería funcionar:
var topPos = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
window.location.href = ''#'';
document.documentElement.scrollTop = topPos;