How to get scrollbar position with Javascript?

前端 未结 9 2244
自闭症患者
自闭症患者 2020-11-22 11:23

I\'m trying to detect the position of the browser\'s scrollbar with JavaScript to decide where in the page the current view is. My guess is that I have to detect where the t

相关标签:
9条回答
  • 2020-11-22 11:43

    Answer for 2018:

    The best way to do things like that is to use the Intersection Observer API.

    The Intersection Observer API provides a way to asynchronously observe changes in the intersection of a target element with an ancestor element or with a top-level document's viewport.

    Historically, detecting visibility of an element, or the relative visibility of two elements in relation to each other, has been a difficult task for which solutions have been unreliable and prone to causing the browser and the sites the user is accessing to become sluggish. Unfortunately, as the web has matured, the need for this kind of information has grown. Intersection information is needed for many reasons, such as:

    • Lazy-loading of images or other content as a page is scrolled.
    • Implementing "infinite scrolling" web sites, where more and more content is loaded and rendered as you scroll, so that the user doesn't have to flip through pages.
    • Reporting of visibility of advertisements in order to calculate ad revenues.
    • Deciding whether or not to perform tasks or animation processes based on whether or not the user will see the result.

    Implementing intersection detection in the past involved event handlers and loops calling methods like Element.getBoundingClientRect() to build up the needed information for every element affected. Since all this code runs on the main thread, even one of these can cause performance problems. When a site is loaded with these tests, things can get downright ugly.

    See the following code example:

    var options = {
      root: document.querySelector('#scrollArea'),
      rootMargin: '0px',
      threshold: 1.0
    }
    
    var observer = new IntersectionObserver(callback, options);
    
    var target = document.querySelector('#listItem');
    observer.observe(target);
    

    Most modern browsers support the IntersectionObserver, but you should use the polyfill for backward-compatibility.

    0 讨论(0)
  • 2020-11-22 11:44

    it's like this :)

    window.addEventListener("scroll", (event) => {
        let scroll = this.scrollY;
        console.log(scroll)
    });
    
    0 讨论(0)
  • 2020-11-22 11:44

    if you care for the whole page. you can use this:

    document.body.getBoundingClientRect().top

    0 讨论(0)
  • 2020-11-22 11:46

    If you are using jQuery there is a perfect function for you: .scrollTop()

    doc here -> http://api.jquery.com/scrollTop/

    note: you can use this function to retrieve OR set the position.

    see also: http://api.jquery.com/?s=scroll

    0 讨论(0)
  • 2020-11-22 11:50

    You can use element.scrollTop and element.scrollLeft to get the vertical and horizontal offset, respectively, that has been scrolled. element can be document.body if you care about the whole page. You can compare it to element.offsetHeight and element.offsetWidth (again, element may be the body) if you need percentages.

    0 讨论(0)
  • 2020-11-22 11:52

    I think the following function can help to have scroll coordinate values:

    const getScrollCoordinate = (el = window) => ({
      x: el.pageXOffset || el.scrollLeft,
      y: el.pageYOffset || el.scrollTop,
    });
    

    I got this idea from this answer with a little change.

    0 讨论(0)
提交回复
热议问题