Adobe does have a plugin called getPercentPageViewed
https://experienceleague.adobe.com/docs/analytics/implementation/vars/plugins/getpercentpageviewed.html?lang=en
Similar to other implementations, this plugin sends tracking as part of Page Views (but for the previous page viewed). Essentially sending the "max percent of the previous page" seen. This keeps server calls (and costs) down, but it generally means that you won't get the % viewed on the last page of a visit (which by extension means that single page visits won't have any data).
The other thing to consider is with responsive web pages, and so may different screen sizes (from very large with high resolution) to smaller handheld devices with limited screen real-estate; the concept of % is quite flexible....
Now, I know this would inflate server calls, so don't run out an do this without investigation into potential costs, but in theory, you could create a custom action to fire when the user scrolls down and sees a specific element on the screen....
To check if an element is in the viewport:
https://www.30secondsofcode.org/js/s/element-is-visible-in-viewport/
To detect "Scroll Event" which you can use to then check when the user scrolls if the element is visible:
https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event
Then if you build this into a Rule, you would likely want to apply a Max Frequency condition, to only fire once per page view (so that once the element has been "seen", you don't keep triggering tracking if the user is scrolling up and down the page multiple times.
But again, this is only if you have enough server calls on your contract to support this (and IF this will be applied to all pages, or just very specific cases).