Acho que isso pode não ser possível, vou tentar explicar da melhor maneira que puder. Eu tenho uma página contendo guias (jquery powered), controlada pelo seguinte:
Estou usando este código, fornecido por outro usuário em uma pergunta anterior.
<script type="text/javascript">
$(function() {
$('html, body').animate({scrollTop:0}); // this is my "fix"
var tabContent = $(".tab_content");
var tabs = $("#menu li");
var hash = window.location.hash;
tabContent.not(hash).hide();
if(hash=="") {
$('#tab1').fadeIn();
}
tabs.find('[href=' + hash + ']').parent().addClass('active');
tabs.click(function() {
$(this).addClass('active').siblings().removeClass('active');
tabContent.hide();
var activeTab = $(this).find("a").attr("href");
$(activeTab).fadeIn();
return false;
});
});
</script>
esse código funciona muito bem quando eu visito a página "guias" diretamente.
no entanto, preciso criar um link para guias individuais de outras páginas - então, para fazer isso, o código obtém o window.location.hash
e mostra a guia apropriada.
a página não "pula" para a âncora por causa do "retorno falso".
este evento só é acionado em um evento de clique. portanto, se eu visitar minhas "guias" em qualquer outra página, o efeito de "pulo" é ativado. Para combater isso, vou automaticamente até o topo da página, mas prefiro que isso não aconteça.
existe alguma maneira de simular o "retorno falso" quando a página carrega, evitando que o "salto" da âncora ocorra.
espero que isso esteja claro o suficiente.
obrigado
setTimeout
e nem sempre funcionou. Você provavelmente não precisa disso se estiver no jQuery de$(function() {
qualquer maneira. Você realmente não precisa dolocation.hash
, mas é bom deixá-lo ativado para que os navegadores não tenham que fazer nada. Também lembra para que serve o scrollTo!if
deve estar fora, não dentro. além disso, o mínimo para o intervalo é cerca de 10, então 0 ou 1 é o mesmo ... como 10. dependendo do navegador.Veja minha resposta aqui: Resposta Stackoverflow
O truque é apenas remover a hashtag o mais rápido possível e armazenar seu valor para seu próprio uso:
É importante que você não coloque essa parte do código nas funções $ () ou $ (window) .load (), pois seria tarde demais e o navegador já teria passado para a tag.
fonte
Existem outras maneiras de rastrear em qual guia você está; talvez definindo um cookie ou um valor em um campo oculto, etc. etc.
Eu diria que se você não quiser que a página salte no carregamento, seria melhor usar uma dessas outras opções em vez do hash, porque a principal razão para usar o hash em vez deles é permitir exatamente o que você está querendo bloquear.
Outro ponto - a página não saltará se seus links hash não corresponderem aos nomes das tags no documento, então talvez se você quiser continuar usando o hash, você pode manipular o conteúdo para que as tags tenham nomes diferentes. Se você usar um prefixo consistente, ainda poderá usar Javascript para alternar entre eles.
Espero que ajude.
fonte
Usei a solução dave1010, mas ficou um pouco assustada quando a coloquei dentro da função $ (). Ready. Então eu fiz isso: (não dentro de $ (). Pronto)
fonte
O navegador pula para
<element id="abc" />
se houver http://site.com/#abc hash no endereço e o elemento com id = "abc" estiver visível. Então, você só deve ocultar o elemento por padrão:<element id="anchor" style="display: none" />
. Se não houver nenhum elemento visível com id = hash na página, o navegador não saltará.Crie um script que verifique o hash no url e, em seguida, encontre e mostre o elemento apropriado (que está oculto por padrão).
Desative o comportamento padrão de "link semelhante a hash" vinculando um evento onclick a um link e especifique
return false;
como resultado do evento onclick.Quando implementei guias, escrevi algo assim:
fonte
Nenhuma das respostas não funciona bem para mim, vejo a página pulando para a âncora e depois para o topo para algumas soluções, algumas respostas não funcionam de todo, podem ser coisas mudadas por anos. Espero que minha função ajude alguém.
fonte
$(document).ready(function () { preventAnchorScroll(); });
basta chamar a função bem no início do seu JavaScript. Eu testei agora, funciona para mim no Chrome, Firefox e Opera.CSS sujo apenas corrige para permanecer rolado para cima toda vez que a âncora é usada (não é útil se você ainda deseja usar âncoras para saltos de rolagem, muito útil para links diretos):
fonte
Embora a resposta aceita funcione bem, eu descobri que às vezes, especialmente em páginas que contêm imagens grandes que a barra de rolagem pula rapidamente usando
O que pode ser bastante perturbador para o usuário.
A solução que decidi no final é realmente muito simples, e isso é usar um ID diferente no alvo para aquele usado em
location.hash
Por exemplo:
Aqui está o link em alguma outra página
Então, é claro, se houver um elemento com um ID de
tab2
na página de guias, a janela saltará para ele no carregamento.Portanto, você pode anexar algo ao ID para evitá-lo:
E então você pode acrescentar
"-noScroll"
alocation.hash
no javascript:fonte
No meu caso, devido ao uso de link âncora para CSS pop-up, usei desta forma:
Basta salvar o pageYOffset primeiro ao clicar e, em seguida, definir o ScrollTop para:
fonte
Acho que encontrei uma maneira de usar as guias da interface do usuário sem refazer a funcionalidade. Até agora não encontrei nenhum problema.
Tudo dentro de um evento pronto. Ele precede "tab_" para o hash, mas funciona tanto quando clicado quanto na página carregada com hash.
fonte
Isso funcionará com bootstrap v3
fonte
Outra abordagem
Experimente verificar se a página foi rolada e só então redefina a posição:
Heres a demo
fonte
Não tive muito sucesso com os
setTimeout
métodos acima no Firefox.Em vez de setTimeout, usei uma função onload:
Ainda é muito problemático, infelizmente.
fonte
Não tive nenhum sucesso consistente com essas soluções.
Aparentemente devido ao fato de que o salto acontece antes de Javascript => referência ( http://forum.jquery.com/topic/preventing-anchor-jump )
Minha solução é posicionar todas as âncoras no topo por padrão com CSS.
Em seguida, use jquery para rolar até o pai da âncora de destino ou um irmão (talvez uma tag em vazia)
jquery exemplo para rolar para quando o URL é inserido com hash
(a página não deve estar carregada na janela / guia, isso cobre links de outras fontes externas)
Além disso, você deseja evitar o padrão para cliques de âncora enquanto na página e, em seguida, rolar para seus destinos
e jquery
A vantagem desse método é que os alvos da tag âncora permanecem estruturalmente ao lado do conteúdo relevante, embora sua posição CSS esteja no topo.
Isso deve significar que os rastreadores de mecanismos de pesquisa não terão problemas.
Saúde, espero que isso ajude
Gray
fonte
Tente isso para evitar que o cliente faça qualquer tipo de rolagem vertical em hashchanged (dentro de seu manipulador de eventos):
(redesenho do navegador)
fonte
Resolvi meu problema fazendo isto:
fonte