J'essaie de détecter la position de la barre de défilement du navigateur avec JavaScript pour décider où dans la page se trouve la vue actuelle. Je suppose que je dois détecter où se trouve le pouce sur la piste, puis la hauteur du pouce en pourcentage de la hauteur totale de la piste. Est-ce que je complique trop les choses ou est-ce que JavaScript offre une solution plus simple que cela? Des idées au niveau du code?
203
element
etdocument.body
n'étaient que des exemples). Voir howtocreate.co.uk/tutorials/javascript/browserwindow pour plus de détails.window.pageYOffset
, mais je ne peux rien faire fonctionner sur IE7. Essayéwindow.pageYOffset
,document.body.scrollTop
,document.documentElement.scrollTop
,element.scrollTop
document.body
dans la plupart des navigateurs modernes - elle est généralement activéedocument.documentElement
maintenant. Voir bugs.chromium.org/p/chromium/issues/detail?id=157855 pour la transition de Chrome.Je l'ai fait pour un
<div>
Chrome.element .scrollTop - sont les pixels cachés en haut en raison du défilement. Sans défilement, sa valeur est 0.
element .scrollHeight - correspond aux pixels de la division entière.
element .clientHeight - sont les pixels que vous voyez dans votre navigateur.
var a = element.scrollTop;
sera la position.
var b = element.scrollHeight - element.clientHeight;
sera la valeur maximale de scrollTop .
var c = a / b;
sera le pourcentage de défilement [de 0 à 1] .
la source
document.getScroll = function() { if (window.pageYOffset != undefined) { return [pageXOffset, pageYOffset]; } else { var sx, sy, d = document, r = d.documentElement, b = d.body; sx = r.scrollLeft || b.scrollLeft || 0; sy = r.scrollTop || b.scrollTop || 0; return [sx, sy]; } }
renvoie un tableau avec deux entiers- [scrollLeft, scrollTop]
la source
C'est comme ça :)
window.addEventListener("scroll", (event) => { let scroll = this.scrollY; console.log(scroll) });
la source
Réponse pour 2018 :
La meilleure façon de faire des choses comme ça est d'utiliser l' API Intersection Observer .
Consultez l'exemple de code suivant:
La plupart des navigateurs modernes prennent en charge IntersectionObserver , mais vous devez utiliser le polyfill pour la compatibilité descendante.
la source
si vous vous souciez de la page entière. vous pouvez utiliser ceci:
document.body.getBoundingClientRect().top
la source
Si vous utilisez jQuery, il existe une fonction parfaite pour vous: .scrollTop ()
doc ici -> http://api.jquery.com/scrollTop/
remarque: vous pouvez utiliser cette fonction pour récupérer OU définir la position.
voir aussi: http://api.jquery.com/?s=scroll
la source
Voici l'autre façon d'obtenir la position de défilement
const getScrollPosition = (el = window) => ({ x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft, y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop });
la source
Je pense que la fonction suivante peut aider à avoir des valeurs de coordonnées de défilement:
const getScrollCoordinate = (el = window) => ({ x: el.pageXOffset || el.scrollLeft, y: el.pageYOffset || el.scrollTop, });
J'ai eu cette idée de cette réponse avec un petit changement.
la source