J'ai cet input
élément:
<input type="text" class="textfield" value="" id="subject" name="subject">
Ensuite, j'ai d'autres éléments, comme d'autres entrées de texte, des zones de texte, etc.
Lorsque l'utilisateur clique dessus input
avec #subject
, la page doit défiler jusqu'au dernier élément de la page avec une belle animation. Ce devrait être un défilement vers le bas et non vers le haut.
Le dernier élément de la page est un submit
bouton avec #submit
:
<input type="submit" class="submit" id="submit" name="submit" value="Ok, Done.">
L'animation ne doit pas être trop rapide et doit être fluide.
J'utilise la dernière version de jQuery. Je préfère ne pas installer de plugin mais utiliser les fonctionnalités jQuery par défaut pour y parvenir.
javascript
jquery
scroll
DiegoP.
la source
la source
scrollTo
a été désactivé pour moi à cause d'un plugin Chrome, je ne sais pas lequel.Réponses:
En supposant que vous disposez d'un bouton avec l'ID
button
, essayez cet exemple:J'ai obtenu le code de l'article Faites défiler en douceur vers un élément sans plugin jQuery . Et je l'ai testé sur l'exemple ci-dessous.
la source
.scrollTop(…)
plutôt que.animate({scrollTop: …}, …)
.jQuery .scrollTo (): Affichage - Démo, API, Source
J'ai écrit ce plugin léger pour faciliter le défilement des pages / éléments. Il est flexible où vous pouvez passer un élément cible ou une valeur spécifiée. Peut-être que cela pourrait faire partie de la prochaine version officielle de jQuery, qu'en pensez-vous?
Exemples d'utilisation:
Options:
scrollTarget : élément, chaîne ou nombre qui indique la position de défilement souhaitée.
offsetTop : Un nombre qui définit un espacement supplémentaire au-dessus de la cible de défilement.
durée : chaîne ou nombre déterminant la durée de l'animation.
easing : chaîne indiquant la fonction d'accélération à utiliser pour la transition.
complete : une fonction à appeler une fois l'animation terminée.
la source
Si vous n'êtes pas très intéressé par l'effet de défilement fluide et simplement intéressé par le défilement vers un élément particulier, vous n'avez pas besoin d'une fonction jQuery pour cela. Javascript a couvert votre cas:
https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView
Il vous suffit donc de:
$("selector").get(0).scrollIntoView();
.get(0)
est utilisé parce que nous voulons récupérer l'élément DOM de JavaScript et non l'élément DOM de JQuery.la source
$(selector)[0]
?document.getElementById('#elementID').scrollIntoView()
. Inutile de charger une bibliothèque de ~ 100k juste pour sélectionner un élément, puis le convertir en JavaScript standard.document.getElementById('elementID').scrollIntoView()
Utilisation de ce script simple
Faire en sorte que si une balise de hachage est trouvée dans l'url, le scrollTo s'anime vers l'ID. Si aucune balise de hachage n'a été trouvée, ignorez le script.
la source
$(window.location.hash)
ne fonctionnera pas pour les hachages qui ne répondent pas à la détection d'ID de regex de jQuery. Par exemple, des hachages contenant des nombres. C'est aussi un peu dangereux; le format de l'entrée doit être validé afin que vous ne finissiez pas par sélectionner un élément différent.la source
jQuery(document).ready(function($) { $(document).on( "click", 'a[href^="#"]', function( e ) { e.preventDefault(); var target = this.hash, $target = $(target); $('html, body').stop().animate({ scrollTop: $target.offset().top - 100}, 1000); }); });
La solution de Steve et Peter fonctionne très bien.
Mais dans certains cas, vous devrez peut-être convertir la valeur en entier. Étrangement, la valeur retournée par
$("...").offset().top
est parfois dansfloat
.Utilisation:
parseInt($("....").offset().top)
Par exemple:
la source
Une version compacte de la solution "animée".
Utilisation de base:
$('#your_element').scrollTo();
la source
C'est ainsi que je le fais.
Fonctionne dans n'importe quel navigateur.
Il peut facilement être enveloppé dans une fonction
Voici un exemple de travail
Documents
la source
Je connais un moyen sans jQuery:
Edit: Cela fait deux ans et je reçois toujours au hasard la réputation de ce post lmao
la source
Si vous ne gérez que le défilement vers un élément d'entrée, vous pouvez utiliser
focus()
. Par exemple, si vous vouliez faire défiler jusqu'à la première entrée visible:Ou la première entrée visible dans un conteneur de classe
.error
:Merci à Tricia Ball de l' avoir signalé!
la source
Avec cette solution, vous n'avez besoin d'aucun plugin et aucune configuration n'est requise en plus de placer le script avant votre
</body>
balise de fermeture .Au chargement, s'il y a un hachage dans l'adresse, nous y faisons défiler.
Et - chaque fois que vous cliquez sur un
a
lien avec unhref
hachage, par exemple#top
, nous y faisons défiler.la source
> 1
au lieu de0
, simplement parce/#
que ce script se cassereturn false;
à la fin de l'événement sur clic pour empêcher l'action par défaut - défiler immédiatement jusqu'à l'ancre - de se produire.e.preventDefault();
e.preventDefault()
mais ne met pas à jour le hachage dans l'url en cliquant, c'est toujours une URL sans hachageDans la plupart des cas, il serait préférable d'utiliser un plugin. Sérieusement. Je vais vanter le mien ici . Bien sûr, il y en a d'autres aussi. Mais veuillez vérifier s'ils évitent vraiment les pièges pour lesquels vous voudriez un plugin en premier lieu - pas tous.
J'ai écrit sur les raisons d'utiliser un plugin ailleurs . En un mot, la doublure qui sous-tend la plupart des réponses ici
est mauvais UX.
L'animation ne répond pas aux actions de l'utilisateur. Il continue même si l'utilisateur clique, touche ou essaie de faire défiler.
Si le point de départ de l'animation est proche de l'élément cible, l'animation est douloureusement lente.
Si l'élément cible est placé près du bas de la page, il ne peut pas défiler vers le haut de la fenêtre. L'animation de défilement s'arrête alors brusquement, au milieu du mouvement.
Pour gérer ces problèmes (et bien d'autres ), vous pouvez utiliser l'un de mes plugins , jQuery.scrollable . L'appel devient alors
et c'est tout. Bien sûr, il y a plus d'options .
En ce qui concerne le poste cible,
$target.offset().top
fait le travail dans la plupart des cas. Mais sachez que la valeur retournée ne prend pashtml
en compte l' élément ( voir cette démo ). Si vous avez besoin que la position cible soit précise en toutes circonstances, il est préférable d'utiliserCela fonctionne même si une bordure sur l'
html
élément est définie.la source
Animations:
la source
Si vous souhaitez faire défiler un conteneur de débordement (au lieu de
$('html, body')
répondre ci-dessus), en travaillant également avec un positionnement absolu, voici la façon de procéder:la source
Un moyen facile de faire défiler la page pour cibler l'ID de div
la source
Ceci est mon approche abstraite des ID et des href, en utilisant un sélecteur de classe générique
la source
Plugin jQuery personnalisé très simple et facile à utiliser. Ajoutez simplement l'attribut
scroll=
à votre élément cliquable et définissez sa valeur sur le sélecteur vers lequel vous souhaitez faire défiler.Comme ceci:
<a scroll="#product">Click me</a>
. Il peut être utilisé sur n'importe quel élément.la source
la source
$('html, body').animate(...)
ne fonctionne pas pour moi sur iphone, navigateur safari chrome android.J'ai dû cibler l'élément de contenu racine de la page.
Voici ce que j'ai fini avec
Tout le contenu du corps est connecté avec une div #content
la source
Voici la réponse d'Atharva de: https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView . Je voulais juste ajouter si votre document est dans un iframe, vous pouvez choisir un élément dans le cadre parent pour faire défiler la vue:
la source
la source
Cela fera d'abord défiler vers le bas pour
#submit
restaurer ensuite le curseur sur l'entrée sur laquelle vous avez cliqué, ce qui imite un défilement vers le bas et fonctionne sur la plupart des navigateurs. Il ne nécessite pas non plus jQuery car il peut être écrit en JavaScript pur.Cette façon d'utiliser la
focus
fonction peut-elle mieux imiter l'animation, en enchaînant lesfocus
appels. Je n'ai pas testé cette théorie, mais elle ressemblerait à ceci:la source
J'ai mis en place un module scroll-element
npm install scroll-element
. Cela fonctionne comme ceci:Rédigé avec l'aide des messages SO suivants:
offset-top-of-an-element-without-jquery
scrolltop-animation-without-jquery
Voici le code:
la source
Pour afficher l'élément complet (si c'est possible avec la taille de fenêtre actuelle):
la source
J'ai écrit une fonction à usage général qui fait défiler jusqu'à un objet jQuery, un sélecteur CSS ou une valeur numérique.
Exemple d'utilisation:
Le code de la fonction:
la source
Pour ce que ça vaut, c'est ainsi que j'ai réussi à obtenir un tel comportement pour un élément général qui peut être à l'intérieur d'un DIV avec défilement. Dans notre cas, nous ne faisons pas défiler le corps entier, mais seulement des éléments particuliers avec débordement: auto; dans une disposition plus grande.
Il crée une fausse entrée de la hauteur de l'élément cible, puis y met l'accent, et le navigateur se charge du reste, quelle que soit la profondeur de la hiérarchie déroulante. Fonctionne comme un charme.
la source
Cela a fonctionné pour moi:
la source
la source
BON MOT
Afficher l'extrait de code
la source
Réponse mise à jour en 2019:
la source