Eu tenho um documento HTML com imagens em um formato de grade usando <ul><li><img...
. A janela do navegador possui rolagem vertical e horizontal.
Pergunta:
Quando clico em uma imagem <img>
, como faço para que todo o documento role para uma posição em que a imagem na qual eu apenas cliquei está top:20px; left:20px
?
Eu tive uma busca aqui por posts semelhantes ... embora eu seja bastante novo em JavaScript e queira entender como isso é conseguido por mim mesmo.
javascript
jquery
Nasir
fonte
fonte
Respostas:
Como você quer saber como funciona, vou explicar passo a passo.
Primeiro, você deseja vincular uma função como manipulador de cliques da imagem:
Isso aplicará o manipulador de cliques a uma imagem com
id="someImage"
. Se você quiser fazer isso com todas as imagens, substitua'#someImage'
por'img'
.Agora, para o código de rolagem real:
Obtenha as compensações de imagem (relativas ao documento):
Subtraia 20 de
top
eleft
:Agora anime as propriedades CSS de scroll-top e scroll-left de
<body>
e<html>
:fonte
.scrollIntoView
método W3C faz quando os elementos são aninhados em vários contêineres transbordando.Element.scrollIntoView()
: developer.mozilla.org/pt-BR/docs/Web/API/Element/scrollIntoViewscrollIntoView
Existe um método DOM chamado
scrollIntoView
, suportado por todos os principais navegadores, que alinhará um elemento com a parte superior / esquerda da viewport (ou o mais próximo possível).Nos navegadores suportados, você pode fornecer opções:
Como alternativa, se todos os elementos tiverem IDs exclusivos, você poderá alterar a
hash
propriedade dolocation
objeto para suporte ao botão voltar / avançar:Depois disso, basta ajustar as propriedades
scrollTop
/scrollLeft
em -20:fonte
$("#myImage")[0].scrollIntoView(false);
alinhará o elemento na parte inferior da janela.scrollIntoView
pode ser uma experiência confusa para usuários sem algum tipo de animação.scrollIntoView
com o parâmetro booleano. Tentarei enviar uma solicitação de recebimento para caniuse.com mais tarde.<td>
elementos para exibição, mas precisava rolar o pai (<tr>
) e funcionou.Solução mais simples que eu já vi
Tutorial Aqui
fonte
Existem métodos para rolar o elemento diretamente para a visualização, mas se você desejar rolar para um ponto relativo de um elemento, precisará fazê-lo manualmente:
Dentro do manipulador de cliques, obtenha a posição do elemento em relação ao documento, subtraia
20
e usewindow.scrollTo
:fonte
Dê uma olhada no plugin jQuery.scrollTo . Aqui está uma demonstração .
Este plugin possui muitas opções que vão além do que scrollIntoView nativo oferece a você. Por exemplo, você pode definir a rolagem como suave e definir um retorno de chamada para quando a rolagem terminar.
Você também pode ver todos os plugins JQuery marcados com "scroll" .
fonte
Aqui está um rápido plugin do jQuery para mapear bem a funcionalidade do navegador:
fonte
Após tentativa e erro, criei esta função, também funciona com iframe.
fonte
Apenas uma dica. Funciona apenas no Firefox
Element.scrollIntoView ();
fonte
Minha interface do usuário tem uma lista de rolagem vertical de polegares em uma barra de miniaturas. O objetivo era tornar o polegar atual bem no centro da barra de miniaturas. Comecei com a resposta aprovada, mas descobri que havia alguns ajustes para realmente centralizar o polegar atual. espero que isso ajude outra pessoa.
marcação:
jquery:
fonte
2 etapas simples para rolar para baixo até o final ou o fundo.
Etapa 1: obtenha a altura total da div rolável (conversação).
Etapa 2: aplique scrollTop nessa div rolável (conversação) usando o valor obtido na etapa 1.
As etapas acima devem ser aplicadas a todos os anexos na div da conversa.
fonte
Depois de tentar encontrar uma solução que lidasse com todas as circunstâncias (opções para animar o pergaminho, percorrendo o objeto depois que ele fosse exibido, funcionasse mesmo em circunstâncias obscuras, como em um iframe), finalmente acabei escrevendo minha própria solução para isso. Como parece funcionar quando muitas outras soluções falharam, pensei em compartilhá-lo:
$target
é um objeto jQuery que contém o objeto que você deseja rolar para exibição, se necessário.options
(opcional) pode conter as seguintes opções passadas em um objeto:options.$container
- um objeto jQuery apontando para o elemento que contém $ target (em outras palavras, o elemento no dom com as barras de rolagem). O padrão é a janela que contém o elemento $ target e é inteligente o suficiente para selecionar uma janela iframe. Lembre-se de incluir o $ no nome da propriedade.options.padding
- o preenchimento em pixels para adicionar acima ou abaixo do objeto quando ele é rolado para exibição. Desta forma, não está bem contra a borda da janela. O padrão é 20.options.instant
- se definido como true, o jQuery animate não será usado e a rolagem aparecerá instantaneamente no local correto. O padrão é false.options.animationOptions
- quaisquer opções do jQuery que você deseja passar para a função animada do jQuery (consulte http://api.jquery.com/animate/ ). Com isso, você pode alterar a duração da animação ou executar uma função de retorno de chamada quando a rolagem estiver concluída. Isso funciona apenas seoptions.instant
estiver definido como false. Se você precisar de uma animação instantânea, mas com um retorno de chamada, defina emoptions.animationOptions.duration = 0
vez de usaroptions.instant = true
.fonte