Je voudrais que le navigateur fasse défiler la page jusqu'à une ancre donnée, simplement en utilisant JavaScript.
J'ai spécifié un name
ou un id
attribut dans mon code HTML:
<a name="anchorName">..</a>
ou
<h1 id="anchorName2">..</h1>
J'aimerais obtenir le même effet que vous obtiendriez en naviguant vers http://server.com/path#anchorName
. La page doit être défilée de sorte que l'ancre se trouve près du haut de la partie visible de la page.
<a href="#anchorName">link</a>
function scrollToHash(hashName) { location.hash = "#" + hashName; }
Bien plus simple:
la source
scrollIntoViewOptions
qui a unebehavior: "smooth"
option, mais il n'est actuellement compatible qu'avec Firefox.Vous pouvez utiliser jQuerys .animate () , .offset () et
scrollTop
. Commeexemple de lien: http://jsbin.com/unasi3/edit
Si vous ne voulez pas animer, utilisez .scrollTop () comme
ou javascripts natifs
location.hash
commela source
<h1 id="anchorName">
ou un<a name="anchorName">
, utilisez$('#'+hash+',a[name='+hash+']')
ou légèrement optimisé$(document.getElementById(hash) || 'a[name='+hash+']')
qui recherchera l'élément par id en premier, et n'aura recours à la recherche du a que s'il n'est pas trouvé.$("#selector")
est optimisé mais$("#selector,a[name='selector']")
ne passera pas par les mêmes optimisations aussi rapidement. Je suppose que mon commentaire de 2,5 ans est un peu étrange. L '"optimisation" évite laa[name='selector']
recherche si elle trouve l'identifiant, pas l'optimisation de la recherche de l'identifiant.Excellente solution par jAndy, mais le défilement fluide semble avoir des problèmes de fonctionnement dans Firefox.
L'écrire de cette façon fonctionne également dans Firefox.
la source
Pure js 2018-2020:
Il existe un moyen très pratique de faire défiler jusqu'à l'élément:
Mais pour autant que je comprends, il n'a pas un tel soutien que les options ci-dessous.
En savoir plus sur la méthode.
S'il est nécessaire que l'élément soit en haut:
Exemple de démonstration sur Codepen
Si vous souhaitez que l'élément soit au centre:
Exemple de démonstration sur Codepen
Soutien:
Ils écrivent que
scroll
c'est la même méthode quescrollTo
, mais le support montre mieux dansscrollTo
.En savoir plus sur la méthode
la source
Une solution javascript pure sans JQuery. Testé sur Chrome & Ie, non testé sur IOS
démo: https://jsfiddle.net/jd7q25hg/12/
la source
En 2018, vous n'avez pas besoin de jQuery pour quelque chose de simple comme ça. La
scrollIntoView()
méthode intégrée prend en charge unebehavior
propriété " " pour faire défiler en douceur vers n'importe quel élément de la page. Vous pouvez même mettre à jour l'URL du navigateur avec un hachage pour le mettre en signet.À partir de ce didacticiel sur le défilement des signets HTML , voici une façon native d'ajouter automatiquement un défilement fluide à tous les liens d'ancrage sur votre page:
la source
Faites défiler en douceur jusqu'à la bonne position (2019)
Obtenez des
y
coordonnées et une utilisation correcteswindow.scrollTo({top: y, behavior: 'smooth'})
Avec décalage
scrollIntoView
est également une bonne option, mais elle peut ne pas fonctionner parfaitement dans certains cas. Par exemple, lorsque vous avez besoin d'un décalage supplémentaire . AvecscrollTo
vous avez juste besoin d'ajouter ce décalage comme ceci:la source
css html { scroll-behavior: smooth; }
la source
La solution de CSS-Tricks ne fonctionne plus dans jQuery 2.2.0. Cela générera une erreur de sélection:
Je l'ai corrigé en changeant le sélecteur. L'extrait complet est le suivant:
la source
La plupart des réponses sont inutilement compliquées.
Si vous voulez simplement passer à l'élément cible, vous n'avez pas besoin de JavaScript:
Si vous souhaitez faire défiler la cible avec animation , veuillez vous référer à la réponse de @ Shahil.
la source
Cela marche:
https://jsfiddle.net/68pnkfgd/
Ajoutez simplement la classe 'scroll' à tous les liens que vous souhaitez animer
la source
Il s'agit d'un script de travail qui fera défiler la page jusqu'à l'ancre. Pour configurer, donnez simplement au lien d'ancre un identifiant qui correspond à l'attribut name de l'ancre à laquelle vous souhaitez faire défiler.
la source
Je sais que cette question est vraiment ancienne, mais j'ai trouvé une solution jQuery facile et simple dans css-tricks . C'est celui que j'utilise maintenant.
la source
la source
une solution vue2 ... ajouter une propriété de données simple pour forcer simplement la mise à jour
la source
la façon la plus simple de faire défiler la page jusqu'à une ancre donnée est de taper votre style.css * {scroll-behavior: smooth;} et dans votre navigation html, utilisez #NameOfTheSection
la source