135 votes

Comment faire défiler la page jusqu'à un endroit précis à l'aide de jquery ?

Est-il possible de faire défiler la page jusqu'à un endroit précis à l'aide de jQuery ?

Est-ce que l'emplacement vers lequel je veux défiler doit avoir :

<a name="#123">here</a>

Ou peut-il simplement se déplacer vers un DOM id spécifique ?

3 votes

Juste une petite note : l'attribut "name" n'est pas autorisé en XHTML 1.1 Strict, utilisez un ID à la place.

0 votes

Question intéressante, on ne peut pas utiliser les coordonnées de la page pour faire défiler ? Je pense qu'on devrait pouvoir le faire.

0 votes

J'ai obtenu une solution similaire à votre demande à [ici][1][1] : stackoverflow.com/questions/3432656/

243voto

Juraj Blahunka Points 5620

Plugin jQuery Scroll

puisque c'est une question étiquetée avec jquery Je dois dire que cette bibliothèque dispose d'un plugin très agréable pour un défilement fluide, vous pouvez le trouver ici : http://plugins.jquery.com/scrollTo/

Extraits de la documentation :

$('div.pane').scrollTo(...);//all divs w/class pane

ou

$.scrollTo(...);//the plugin will take care of this

Fonction jQuery personnalisée pour le défilement

vous pouvez utiliser un approche légère en définissant votre fonction jquery de défilement personnalisée

$.fn.scrollView = function () {
    return this.each(function () {
        $('html, body').animate({
            scrollTop: $(this).offset().top
        }, 1000);
    });
}

et l'utiliser comme :

$('#your-div').scrollView();

Faire défiler les coordonnées d'une page

Animer html et body éléments avec scrollTop ou scrollLeft attributs

$('html, body').animate({
    scrollTop: 0,
    scrollLeft: 300
}, 1000);

Simple javascript

défilement avec window.scroll

window.scroll(horizontalOffset, verticalOffset);

pour résumer, utilisez le hash de window.location.hash pour sauter à l'élément avec ID

window.location.hash = '#your-page-element';

Directement en HTML (amélioration de l'accessibilité)

<a href="#your-page-element">Jump to ID</a>

<div id="your-page-element">
    will jump here
</div>

0 votes

Merci @Juraj Blahunka, mais je fais cela sans aucun plugin.

0 votes

Le lien ne m'amène pas à ScrollTo . Pouvez-vous le mettre à jour s'il vous plaît ?

0 votes

Cela devrait être la réponse !

129voto

nickf Points 185423

Oui, même en JavaScript simple, c'est assez facile. Vous donnez un identifiant à un élément et vous pouvez l'utiliser comme "signet" :

<div id="here">here</div>

Si vous voulez qu'il défile lorsqu'un utilisateur clique sur un lien, vous pouvez simplement utiliser la méthode éprouvée :

<a href="#here">scroll to over there</a>

Pour le faire de manière programmatique, utilisez scrollIntoView()

document.getElementById("here").scrollIntoView()

0 votes

@nickf Ceci n'est pas encore supporté partout. caniuse.com/#search=scrollIntoView

0 votes

Ceci est soutenu ( developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView ). Je pense que vous n'avez pas bien lu la caniuse. Cependant, il ne sera pas animé. Plutôt un saut assez abrupt, ce qui n'est pas toujours génial.

55voto

Meghdad Hadidi Points 136

Il n'est pas nécessaire d'utiliser un plugin, vous pouvez le faire comme ceci :

var divPosition = $('#divId').offset();

puis utilisez-le pour faire défiler le document vers un DOM spécifique :

$('html, body').animate({scrollTop: divPosition.top}, "slow");

3 votes

+1 C'est probablement la meilleure réponse. Pas beaucoup de code et ne nécessite pas de plugin.

1 votes

Notez que vous devrez peut-être recalculer le décalage lors du redimensionnement de la fenêtre.

2 votes

@BartBurg bon point - ou juste recalculer juste avant la .animate l'appel se produit

21voto

o.k.w Points 15721

Voici une version purement javascript :

location.hash = '#123';

Il défilera automatiquement. N'oubliez pas d'ajouter le préfixe "#".

1 votes

En utilisant la méthode primitive de l'ancre nommée, vous pouvez avoir une URL qui inclut le hash, par exemple. mon-site.com/page-about/#123 La mise en signet comprend également le comportement hachage + scrollintoview.

1 votes

Ce serait génial si vous pouviez expliquer un peu

6voto

user2793243 Points 31
<div id="idVal">
    <!--div content goes here-->
</div>
...
<script type="text/javascript">
     $(document).ready(function(){
         var divLoc = $('#idVal').offset();
         $('html, body').animate({scrollTop: divLoc.top}, "slow");
     });
</script>

Cet exemple montre de localiser à un id div particulier c'est-à-dire, 'idVal' dans ce cas. Si vous avez des divs/tables successifs qui s'ouvriront dans cette page via ajax, alors vous pouvez attribuer des divs uniques et appeler le script pour faire défiler jusqu'à l'emplacement particulier pour chaque contenu de divs.

J'espère que cela vous sera utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X