Existe uma maneira de controlar a rolagem do navegador com JavaScript / jQuery?
Quando rolar a página até a metade do caminho e acionar uma recarga, desejo que a página seja empacotada até o topo, mas ela tenta encontrar a última posição de rolagem. Então eu fiz isso:
$('document').ready(function() {
$(window).scrollTop(0);
});
Mas sem sorte.
EDIT :
Então, ambas as suas respostas funcionaram quando eu as ligo após o carregamento da página - Obrigado. No entanto, se eu fizer uma atualização na página, o navegador calculará e rolará para a sua antiga posição de rolagem APÓS o .ready
evento (eu testei a função body onload () também).
Portanto, o acompanhamento é: existe uma maneira de impedir que o navegador role para a posição anterior ou para voltar ao topo depois que ele faz o que quer?
javascript
jquery
html
scroll
Yarin
fonte
fonte
Respostas:
Uau, estou com 9 anos de atraso para esta pergunta. Aqui está:
Adicione esse código à sua carga.
history.scrollSuporte ao navegador de restauração:
Chrome: suportado (desde 46)
Firefox: suportado (desde 46)
IE / Edge: não suportado (ainda ..)
Opera: suportado (desde 33)
Safari: suportado
Para o IE / Edge, se você quiser rolar novamente para o topo APÓS que ele se desloque automaticamente, isso funcionou para mim:
fonte
Solução JavaScript pura entre navegadores:
fonte
$(window).one("scroll",function() { /* the code from my answer here */ });
Você quase tem que - você precisa definir o
scrollTop
onbody
, nãowindow
:EDITAR:
Talvez você possa adicionar uma âncora em branco ao topo da página:
fonte
'html','body'
pois os navegadores modernos rolarão com base no corpo, mas o IE8 e abaixo só rolarão com 'html', 'body'A seguinte solução jquery funciona para mim:
fonte
Aqui está uma versão de rolagem animada em JavaScript pura para no-jQuery'ers: D
E depois:
fonte
requestAnimationStep
vez desetTimeout
. Também não responde à pergunta do OP.ATUALIZAR
Ir para o topo da página com um efeito de rolagem é um pouco mais fácil em javascript agora com:
https://developer.mozilla.org/en-US/docs/Web/API/Window/scroll
CUIDADO
Temos usado isso em nossos projetos mais recentes, mas acabei de verificar o documento do mozilla agora enquanto atualizava minha resposta e acredito que ele foi atualizado. Neste momento, o método é
window.scroll(x-coord, y-coord)
e não menciona ou mostrar exemplos que usam oobject
parâmetro, onde você pode definir obehavior
quesmooth
. Eu apenas tentei o código e ele ainda funciona no chrome e firefox e o parâmetro do objeto ainda está na especificação .Portanto, use-o com cuidado ou use este Polyfill . Além de rolagem ao topo, este polyfill também lida com outros métodos:
window.scrollBy
,element.scrollIntoView
, etc.RESPOSTA ANTIGA
Esta é a nossa
javascript
implementação de baunilha . Ele tem um efeito de alívio simples, para que o usuário não fique chocado depois de clicar no botão Início .É muito pequeno e fica ainda menor quando reduzido. Os desenvolvedores que procuram uma alternativa ao método jquery, mas desejam os mesmos resultados, podem tentar isso.
JS
HTML
Felicidades!
fonte
Isso funciona para mim:
Usa um pequeno
setTimeout
dentro doonload
para dar ao navegador a chance de fazer a rolagem.fonte
Você pode usar com jQuery
fonte
Use a seguinte função
Aqui xpos é obrigatório. A coordenada para rolar, ao longo do eixo x (horizontal), em pixels
ypos também é necessário. A coordenada para rolar, ao longo do eixo y (vertical), em pixels
fonte
Usa isto
fonte
O código a seguir funciona no Firefox, Chrome e Safari , mas não foi possível testar isso no Internet Explorer. Alguém pode testá-lo e editar minha resposta ou comentar sobre ele?
fonte
Minha solução Javascript pura (animada):
Explicação:
window.scrollY
é uma variável mantida pelo navegador da quantidade de pixels da parte superior pela qual a janela foi rolada.window.scrollTo(x,y)
é uma função que rola na janela uma quantidade específica de pixels no eixo xe no eixo y.Assim,
window.scrollTo(0,window.scrollY-20)
move a página 20 pixels para o topo.Ele
setTimeout
chama a função novamente em 10 milissegundos para que possamos movê-la mais 20 pixels (animados), e aif
instrução verifica se ainda precisamos rolar.fonte
Por que você não usa apenas algum elemento de referência no início do seu arquivo html, como
e então, quando a página carregar, simplesmente faça
Se o navegador rolar após o acionamento desta função, você simplesmente
fonte
Percorra o navegador para o topo:
Role entre navegadores até um elemento com id = div_id:
fonte
Para responder à sua pergunta editada, você pode registrar o
onscroll
manipulador da seguinte maneira:Isso fará com que a primeira tentativa de rolagem (provavelmente a automática feita pelo navegador) seja efetivamente cancelada.
fonte
Se você estiver no modo quircks (obrigado @Niet the Dark Absol):
Se você estiver no modo estrito:
Não há necessidade de jQuery aqui.
fonte
Isso está funcionando:
fonte
No meu caso, o corpo não funcionou:
Mas o HTML funcionou:
fonte
'html','body'
como os navegadores modernos FF, Chrome irá rolar com base no corpo, mas IE8 e abaixo somente irá rolar com'html','body'
A combinação desses dois me ajudou. Nenhuma das outras respostas me ajudou, pois eu tinha um sidenav que não estava rolando.
fonte
fonte
sem animação, apenas
scroll(0, 0)
(baunilha JS)fonte
Se alguém estiver usando design angular e de material com o sidenav. Isso o enviará para o topo da página:
fonte
Veja que o hash deve fazer o trabalho. Se você tem um cabeçalho, pode usar
caso contrário, o # sozinho funcionará
E, à medida que for escrito no URL, ele permanecerá se você atualizar.
De fato, você não precisa de JavaScript para isso. Se quiser fazê-lo em um evento onclick, basta colocar um link ao seu redor e dar # como href.
fonte
Primeiro, adicione uma marca de âncora em branco ao local para onde deseja ir
Agora adicione uma função na seção de cabeçalho
finalmente adicione um evento onload à tag body
fonte
Uma versão genérica que funciona para qualquer valor X e Y e é igual à API window.scrollTo, apenas com a adição de scrollDuration.
* Uma versão genérica correspondente à API window.scrollTo do navegador **
fonte
Lembro-me de ver isso postado em outro lugar (não consegui encontrar onde), mas isso funciona muito bem:
É estranho, mas o modo como funciona é baseado na maneira como a fila de pilhas do JavaScript funciona. A explicação completa pode ser encontrada aqui na seção Atraso Zero.
A ideia básica é que o tempo para
setTimeout
realmente não especifique a quantidade de tempo que irá esperar, mas a quantidade mínima de tempo que irá esperar. Portanto, quando você diz para esperar 0ms, o navegador executa todos os outros processos na fila (como rolar a janela para onde você estava por último) e, em seguida, executa o retorno de chamada.fonte
fonte