Existe-t-il un moyen de contrôler le défilement du navigateur avec JavaScript / jQuery?
Lorsque je fais défiler ma page à mi-chemin, puis que je déclenche un rechargement, je veux que la page aille vers le haut, mais à la place, elle essaie de trouver la dernière position de défilement. Alors j'ai fait ceci:
$('document').ready(function() {
$(window).scrollTop(0);
});
Mais pas de chance.
MODIFIER :
Donc, vos deux réponses ont fonctionné lorsque je les ai appelées après le chargement de la page - Merci. Cependant, si je fais juste une actualisation sur la page, on dirait que le navigateur calcule et défile jusqu'à son ancienne position de défilement APRÈS l' .ready
événement (j'ai également testé la fonction onload () du corps).
Le suivi est donc: y a-t-il un moyen d'empêcher le navigateur de défiler jusqu'à sa position passée ou de faire défiler à nouveau vers le haut APRÈS qu'il ait fait son travail?
la source
Réponses:
Wow, j'ai 9 ans de retard sur cette question. Voici:
Ajoutez ce code à votre onload.
Prise en charge du navigateur history.scrollRestoration:
Chrome: pris en charge (depuis 46)
Firefox: pris en charge (depuis 46)
IE / Edge: non pris en charge (encore ..)
Opera: pris en charge (depuis 33)
Safari: pris en charge
Pour IE / Edge, si vous souhaitez faire défiler à nouveau vers le haut APRÈS qu'il défile automatiquement, cela a fonctionné pour moi:
la source
Solution multi-navigateur, pure JavaScript:
la source
$(window).one("scroll",function() { /* the code from my answer here */ });
Vous presque l' avez - vous devez régler le
scrollTop
surbody
, nonwindow
:ÉDITER:
Vous pouvez peut-être ajouter une ancre vierge en haut de la page:
la source
'html','body'
car les navigateurs modernes défileront en fonction du corps, mais IE8 et ci-dessous ne défileront qu'avec 'html', 'body'La solution jquery suivante fonctionne pour moi:
la source
Voici une version de défilement animé purement JavaScript pour les utilisateurs de no-jQuery: D
Puis:
la source
requestAnimationStep
plutôt quesetTimeout
. De plus, cela ne répond pas à la question d'OP.METTRE À JOUR
Aller en haut de la page avec un effet de défilement est un peu plus facile en javascript maintenant avec:
https://developer.mozilla.org/en-US/docs/Web/API/Window/scroll
MISE EN GARDE
Nous l'avons utilisé dans nos projets les plus récents, mais je viens de vérifier la documentation mozilla en ce moment tout en mettant à jour ma réponse et je pense qu'elle a été mise à jour. En ce moment , la méthode est
window.scroll(x-coord, y-coord)
et ne mentionne pas d' exemples ou de montrer qui utilisent leobject
paramètre où vous pouvez définir lebehavior
àsmooth
. Je viens d'essayer le code et cela fonctionne toujours dans Chrome et Firefox et le paramètre d'objet est toujours dans les spécifications .Utilisez donc ceci avec prudence ou vous pouvez utiliser ce Polyfill . Mis à part le défilement vers le haut, ce polyfill gère également d' autres méthodes:
window.scrollBy
,element.scrollIntoView
, etc.ANCIENNE RÉPONSE
Ceci est notre
javascript
implémentation vanille . Il a un simple effet d'accélération afin que l'utilisateur ne soit pas choqué après avoir cliqué sur le bouton Vers le haut .Il est très petit et devient encore plus petit lorsqu'il est minifié. Les développeurs qui recherchent une alternative à la méthode jquery mais veulent les mêmes résultats peuvent essayer ceci.
JS
HTML
À votre santé!
la source
Cela fonctionne pour moi:
Utilise un court
setTimeout
à l'intérieur duonload
pour donner au navigateur une chance de faire le défilement.la source
Vous pouvez utiliser avec jQuery
la source
Utilisez la fonction suivante
Ici, xpos est obligatoire. La coordonnée vers laquelle faire défiler, le long de l'axe des x (horizontal), en pixels
ypos est également obligatoire. La coordonnée vers laquelle faire défiler, le long de l'axe y (vertical), en pixels
la source
Utilisez ceci
la source
Le code suivant fonctionne dans Firefox, Chrome et Safari , mais je n'ai pas pu le tester dans Internet Explorer. Quelqu'un peut-il le tester, puis modifier ma réponse ou la commenter?
la source
Ma solution Javascript pure (animée):
Explication:
window.scrollY
est une variable gérée par le navigateur de la quantité de pixels à partir du haut par laquelle la fenêtre a été défilée.window.scrollTo(x,y)
est une fonction qui fait défiler la fenêtre d'une quantité spécifique de pixels sur l'axe x et sur l'axe y.Ainsi,
window.scrollTo(0,window.scrollY-20)
déplace la page de 20 pixels vers le haut.La
setTimeout
fonction appelle à nouveau la fonction dans 10 millisecondes afin que nous puissions la déplacer de 20 pixels supplémentaires (animée), et l'if
instruction vérifie si nous devons encore faire défiler.la source
Pourquoi n'utilisez-vous pas simplement un élément de référence au tout début de votre fichier html, comme
puis, lorsque la page se charge, faites simplement
Si le navigateur défile après le déclenchement de cette fonction, faites simplement
la source
Faites défiler les navigateurs vers le haut:
Faites défiler les navigateurs jusqu'à un élément avec id = div_id:
la source
Pour répondre à votre question modifiée, vous pouvez enregistrer le
onscroll
gestionnaire comme ceci:Cela fera en sorte que la première tentative de défilement (qui est probablement la tentative automatique effectuée par le navigateur) sera effectivement annulée.
la source
Si vous êtes en mode quircks (merci @Niet the Dark Absol):
Si vous êtes en mode strict:
Pas besoin de jQuery ici.
la source
Cela fonctionne:
la source
Dans mon cas, le corps n'a pas fonctionné:
Mais HTML a fonctionné:
la source
'html','body'
comme les navigateurs modernes FF, Chrome défilera en fonction du corps, mais IE8 et ci-dessous ne défileront qu'avec'html','body'
La combinaison de ces deux m'a aidé. Aucune des autres réponses ne m'a aidé car j'avais un sidenav qui ne défilait pas.
la source
la source
sans animation, juste
scroll(0, 0)
(vanilla JS)la source
Si quelqu'un utilise la conception angulaire et matérielle avec sidenav. Cela vous enverra en haut de la page:
la source
Seeint le hachage devrait faire le travail. Si vous avez un en-tête, vous pouvez utiliser
sinon, le # seul fonctionnera
Et comme il est écrit dans l'URL, il restera si vous actualisez.
En fait, vous n'avez pas besoin de JavaScript pour cela si vous voulez le faire sur un événement onclick, vous devriez simplement mettre un lien autour de votre élément et lui donner # comme href.
la source
Ajoutez d'abord une balise d'ancrage vide à l'endroit où vous voulez aller
Maintenant, ajoutez une fonction dans la section d'en-tête
enfin ajouter un événement onload à la balise body
la source
Une version générique qui fonctionne pour toutes les valeurs X et Y, et qui est la même que l'api window.scrollTo, juste avec l'ajout de scrollDuration.
* Une version générique correspondant à l'api du navigateur window.scrollTo **
la source
Je me souviens avoir vu cela publié ailleurs (je n'ai pas pu trouver où), mais cela fonctionne très bien:
C'est bizarre, mais la façon dont cela fonctionne est basée sur le fonctionnement de la file d'attente de pile de JavaScript. L'explication complète se trouve ici dans la section Zero Delays.
L'idée de base est que le temps pour
setTimeout
ne spécifie pas réellement la durée définie pour laquelle il attendra, mais le temps minimum pendant lequel il attendra. Ainsi, lorsque vous lui dites d'attendre 0 ms, le navigateur exécute tous les autres processus en file d'attente (comme faire défiler la fenêtre jusqu'à l'endroit où vous étiez en dernier), puis exécute le rappel.la source
la source