Lisse de défilement de l'ancre des liens SANS jQuery
Est-il possible d'utiliser lisse de défilement à l'ancre des liens, mais sans jQuery
? Je suis entrain de créer un nouveau site et je ne veux pas utiliser jQuery
.
- 25%? HA! Ouais c'est vrai...
- J'ai essayé avec de la pure js,mais il donne des secousses
- jquery comprend donc beaucoup de code inutile, tu ne retrouveras jamais utiliser le 50% de l'ensemble de jquery , donc aller à la vanille JS et obtenez seulement ce que vous avez besoin de jquery
- tout le monde a besoin d'arrêter l'utilisation de jquery! Je pense qu'il est grand, mais nous sommes à un moment où le mobile est roi! et nous avons besoin pour optimiser.
Vous devez vous connecter pour publier un commentaire.
À l'aide de la fonction à partir d'ici: Animations JavaScript et de la modifier pour modifier une propriété (pas seulement un style de propriété), vous pouvez essayer quelque chose comme ceci:
DÉMO: https://jsfiddle.net/zpu16nen/
Assurez-vous de la taille de la fenêtre assez petit donc il y a en fait une barre de défilement et peut faire défiler jusqu'à la 5ème div.
Et non, il ne nécessite que peu de loisirs de 25% de jQuery.
Ce serait évidemment needly fortement modifiées en fonction de ce que votre question signifie en fait (comme lorsque la fenêtre de modifications de hachage, ou quelque chose comme ça).
Noter qu'avec jQuery, c'est aussi simple que:
DÉMO: http://jsfiddle.net/7TAa2/1/
Viens de dire...
scrollTop
dedocument.body
(a pris une rapide de débogage et de recherche de Google pour comprendre cela). Essayez ceci: jsfiddle.net/zpu16nen (je vais mettre à jour ce post)L'extension de cette réponse: https://stackoverflow.com/a/8918062/3851798
Après la définition de votre fonction de scrollTo, vous pouvez passer à l'élément que vous souhaitez scrollTo dans la fonction.
Si vous avez un div avec un id="pied de page"
Dans le script que vous exécutez pour faire défiler, vous pouvez exécuter cette,
Et là vous l'avez. Défilement lisse sans jQuery. Vous pouvez réellement jouer avec ce code sur la console de votre navigateur et de régler à votre convenance.
duration <= 0
pasduration < 0
(ligne 2)document.documentElement
dans la fonction au lieu dedocument.body
pour le faire fonctionnerEn fait, il est plus léger et simple à faire:
https://codepen.io/ugg0t/pen/mqBBBY
JS:
CSS:
HTML:
element.offsetTop
vous devez utiliserelement.getBoundingClientRect().top + window.scrollY
Utiliser ceci:
DÉMO: https://jsfiddle.net/anderpo/x8ucc5ak/1/
Transitions CSS3 avec un
:target
sélecteur peut donner un joli résultat sans JS piratage. J'étais juste en contemplant si imlement cela, mais sans Jquery il ne obtenir un peu désordonné. Voir cette question pour plus de détails.html { scroll-behavior: smooth; }
- si simple et fonctionne un régal, si vous êtes d'accord pour éviter IE soutienPur léger bibliothèque javascript: lisse de défilement sur github
Vanille js variante en utilisant
requestAnimationFrame
avec des levées et tous les navigateurs pris en charge:Tout l'assouplissement pris en charge!
Essayer ce code ici:
Lisse de Défilement comportement avec polyfill...
Exemple:
Référentiel: https://github.com/iamdustan/smoothscroll
Mon préféré de défilement à l'heure actuelle, la bibliothèque est Zenscroll en raison de la large gamme de fonctionnalités et de petite taille (actuellement uniquement 3.17 ko).
Dans l'avenir peut-être plus logique d'utiliser le natif
scrollIntoView
fonctionnalité, mais comme il faudrait être polyfilled dans la plupart des sites de production aujourd'hui en raison de l'absence d'IE de soutien, je vous recommande d'utiliser Zenscroll au lieu de cela, dans tous les cas.C'est la version mise à niveau à partir de @Ian
Voici une solution simple dans pur JavaScript. Il prend avantage de la propriété CSS de défilement-comportement: lisse
Utilisation:
Disent que nous avons 10 divs:
Nous pouvons faites défiler jusqu'à l'ID de choix:
Il vous suffit de appeler cette fonction sur votre événement click (par exemple, cliquez sur le bouton, puis faites défiler jusqu'à div #9).
Résultat:
Bien sûr, il est beaucoup plus lisse dans la vraie vie.
VIOLON
Malheureusement, IE et Safari ne prennent pas en charge scrollBehavior = "lisse" que de 2019
MDN Web Docs
Pour toute personne en 2019,
tout d'abord, vous ajoutez un écouteur d'événement
puis vous la cible de l'élément et aller en douceur pour qu'il
C'est une jolie vieille question, mais je pense que c'est important de dire que de nos jours défilement lisse est pris en charge dans le CSS, donc il n'y a pas besoin de scripts:
Cette propriété n'a pas encore de support pour Safari ou IE/Edge à compter de 2019, pour un plein crossbrowser de soutien, vous aurez toujours besoin d'utiliser un script.