J'ai un document HTML avec des images dans un format de grille en utilisant <ul><li><img...
. La fenêtre du navigateur a un défilement vertical et horizontal.
Question:
Lorsque je clique sur une image <img>
, comment puis-je faire défiler l'ensemble du document jusqu'à une position où se trouve l'image sur laquelle je viens de cliquer top:20px; left:20px
?
J'ai parcouru ici des articles similaires ... même si je suis assez nouveau dans JavaScript et que je veux comprendre comment cela est réalisé pour moi-même.
javascript
jquery
Nasir
la source
la source
Réponses:
Puisque vous voulez savoir comment cela fonctionne, je vais vous l'expliquer étape par étape.
Vous voulez d'abord lier une fonction en tant que gestionnaire de clics de l'image:
Cela appliquera le gestionnaire de clics à une image avec
id="someImage"
. Si vous souhaitez effectuer cette opération sur toutes les images, remplacez-les'#someImage'
par'img'
.Maintenant, pour le code de défilement réel:
Obtenez les décalages d'image (par rapport au document):
Soustrayez 20 de
top
etleft
:Maintenant, animez les propriétés CSS scroll-top et scroll-left de
<body>
et<html>
:la source
.scrollIntoView
méthode W3C lorsque des éléments sont imbriqués dans plusieurs conteneurs débordants.Element.scrollIntoView()
: developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoViewscrollIntoView
Il existe une méthode DOM appelée
scrollIntoView
, qui est prise en charge par tous les principaux navigateurs, qui alignera un élément avec le haut / gauche de la fenêtre (ou aussi près que possible).Sur les navigateurs pris en charge, vous pouvez fournir des options:
Alternativement, si tous les éléments ont des ID uniques, vous pouvez simplement modifier la
hash
propriété de l'location
objet pour la prise en charge des boutons Précédent / Suivant:Après cela, ajustez simplement les
scrollTop
/scrollLeft
properties de -20:la source
$("#myImage")[0].scrollIntoView(false);
alignera l'élément en bas de la fenêtre.scrollIntoView
peut être une expérience déroutante pour les utilisateurs sans une sorte d'animation.scrollIntoView
avec le paramètre booléen. J'essaierai d'envoyer une pull request pour caniuse.com plus tard.<td>
éléments dans la vue , je devais plutôt faire défiler leur parent (<tr>
) et cela fonctionnait.La solution la plus simple que j'ai vue
Tutoriel ici
la source
Il existe des méthodes pour faire défiler l'élément directement dans la vue, mais si vous souhaitez faire défiler jusqu'à un point relatif à partir d'un élément, vous devez le faire manuellement:
Dans le gestionnaire de clics, obtenez la position de l'élément par rapport au document, soustrayez
20
et utilisezwindow.scrollTo
:la source
Jetez un œil au plugin jQuery.scrollTo . Voici une démo .
Ce plugin a beaucoup d'options qui vont au-delà de ce que vous offre scrollIntoView natif . Par exemple, vous pouvez définir le défilement pour qu'il soit lisse, puis définir un rappel pour la fin du défilement.
Vous pouvez également jeter un œil à tous les plugins JQuery étiquetés "scroll" .
la source
Voici un plugin jQuery rapide pour mapper joliment la fonctionnalité de navigateur intégrée:
la source
Après essais et erreurs, j'ai proposé cette fonction, qui fonctionne également avec iframe.
la source
Juste un conseil. Fonctionne uniquement sur Firefox
Element.scrollIntoView ();
la source
Mon interface utilisateur a une liste de vignettes à défilement vertical dans une barre de vignettes. Le but était de placer le pouce actuel au centre de la barre de vignettes. Je suis parti de la réponse approuvée, mais j'ai constaté qu'il y avait quelques ajustements pour vraiment centrer le pouce actuel. J'espère que ceci aide quelqu'un d'autre.
balisage:
jquery:
la source
2 étapes simples pour faire défiler vers le bas ou la fin.
Étape 1: obtenez la pleine hauteur de la div (conversation) défilante.
Étape 2: appliquez scrollTop sur ce div scrollable (conversation) en utilisant la valeur obtenue à l'étape 1.
Les étapes ci-dessus doivent être appliquées pour chaque ajout sur la division de conversation.
la source
Après avoir essayé de trouver une solution qui gère toutes les circonstances (options pour animer le défilement, remplissage autour de l'objet une fois qu'il défile dans la vue, fonctionne même dans des circonstances obscures comme dans une iframe), j'ai finalement écrit ma propre solution à cela. Comme cela semble fonctionner lorsque de nombreuses autres solutions ont échoué, j'ai pensé le partager:
$target
est un objet jQuery contenant l'objet que vous souhaitez afficher si nécessaire.options
(facultatif) peut contenir les options suivantes passées dans un objet:options.$container
- un objet jQuery pointant vers l'élément contenant de $ target (en d'autres termes, l'élément dans le dom avec les barres de défilement). Par défaut, la fenêtre contenant l'élément $ target est suffisamment intelligente pour sélectionner une fenêtre iframe. N'oubliez pas d'inclure le $ dans le nom de la propriété.options.padding
- le remplissage en pixels à ajouter au-dessus ou au-dessous de l'objet lorsqu'il défile dans la vue. De cette façon, il n'est pas juste contre le bord de la fenêtre. La valeur par défaut est 20.options.instant
- si défini sur true, jQuery animate ne sera pas utilisé et le défilement apparaîtra instantanément à l'emplacement correct. La valeur par défaut est false.options.animationOptions
- toutes les options jQuery que vous souhaitez passer à la fonction d'animation jQuery (voir http://api.jquery.com/animate/ ). Avec cela, vous pouvez modifier la durée de l'animation ou faire exécuter une fonction de rappel lorsque le défilement est terminé. Cela ne fonctionne que sioptions.instant
est défini sur false. Si vous avez besoin d'une animation instantanée mais avec un rappel, définissezoptions.animationOptions.duration = 0
au lieu d'utiliseroptions.instant = true
.la source