What is the best way to detect when scrolling to an element on the page has finished? The spec says that \"The scrolling box is scrolled in a smooth fashion using a user-agent-d
Use a debounce function as wrapper
"use strict";
var count = 0;
// The [trigger] anchors should trigger listening on scrollend
document.addEventListener('click', e => {
if (e.target.matches('a[trigger]')) {
// listen to CustomEvent 'scroll' only once
window.addEventListener('scrollend', function(e) {
console.log('Scrolling has finished', ++count)
}, {
once: true
})
}
});
{
// create the scrollend event
const options = {
passive: true
}
const scrollEnd = debounce(e => {
e.target.dispatchEvent(new CustomEvent('scrollend', {
bubbles: true
}))
}, 100)
window.addEventListener('scroll', scrollEnd, options)
}
// simple debounce
function debounce(callback, wait) {
var timeout;
return function(e) {
clearTimeout(timeout);
timeout = setTimeout(() => {
callback(e);
}, wait);
}
}
html {
scroll-behavior: smooth;
}
section:target {
background-color: lightgray;
}
div {
overflow: auto;
height: 40px;
}
#totop {
position: fixed;
right: 10px;
bottom: 50px;
padding: 10px;
background-color: rgba(255, 155, 255, 0.9);
}
- anchor 1
- anchor 2
- anchor 3
- anchor 4
- anchor 5
- anchor 6 (no trigger)
- anchor 7 (no trigger)
- anchor 8 (no trigger)
- anchor 9 (no trigger)
- anchor 10 (no trigger)
Lorem, ipsum dolor.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nesciunt quibusdam eius possimus est sit iusto mollitia a molestias aperiam quam corrupti in culpa labore odit totam quod molestiae harum aliquid reiciendis, necessitatibus provident quasi laborum
explicabo ad. Recusandae, ea esse!
Natus doloremque voluptatem quas hic deleniti iusto, eaque sit aspernatur! Itaque modi voluptate placeat iure quam mollitia quod ipsum ea dolorem animi quis quisquam incidunt dignissimos cumque soluta cupiditate rem odio qui illo, ad provident explicabo
impedit reprehenderit. Autem, obcaecati.
Omnis, sit libero!
Cumque repellat nesciunt quaerat, perferendis vel optio veritatis similique eum enim at recusandae velit asperiores debitis. Temporibus ratione voluptatem eum sequi voluptates, nihil, fugit, aut labore aliquam sapiente quam quod dolores. Veritatis voluptatem
saepe aspernatur quia aperiam quaerat a impedit.
Harum sunt explicabo repellat deleniti nesciunt, suscipit accusamus blanditiis architecto, voluptatum cupiditate optio quisquam sint, sed dignissimos a itaque eveniet libero in ut non eligendi quibusdam aut delectus? Repellendus consequatur amet unde
maiores eaque ad, minima illo quis iusto inventore?
Veritatis, non commodi.
Rerum inventore quisquam nostrum, obcaecati, repudiandae ducimus cumque sed dicta corporis blanditiis neque, adipisci est porro earum reprehenderit! Facere, corrupti aliquid. Quae dolore placeat, corrupti in harum itaque odit inventore, nam perspiciatis
expedita accusamus est quo illum fuga fugiat! Ipsam!
Repellendus voluptatem optio placeat dolor quis expedita, dignissimos similique provident delectus ex laboriosam libero, fugiat esse. Fugiat ipsum quasi hic. Culpa, illum. Temporibus sunt earum fugit quo expedita asperiores sequi, eveniet culpa suscipit
eum quas quos in ad vel? Odio.
Est, doloribus? Quia.
Perspiciatis accusantium nihil consectetur, beatae nulla doloremque error voluptas vitae, nobis, rem asperiores sit quibusdam corporis! Deserunt, veniam, ipsam placeat illo dolorem odio ducimus quo, facere tenetur commodi provident soluta nihil a minus
doloremque fugit suscipit itaque quasi. Officiis, totam?
Quibusdam reiciendis, deleniti placeat vero cum magnam, laudantium, veniam eius a laboriosam omnis accusamus delectus maiores labore doloremque voluptatum asperiores libero error vitae molestiae inventore eaque quam! Doloribus et, delectus, doloremque
minima temporibus, velit explicabo corrupti quod magnam inventore neque.
Ducimus, tempore omnis?
Doloremque sequi nostrum exercitationem accusamus nemo voluptate vitae perferendis ipsam cumque voluptas vel molestias praesentium, necessitatibus voluptates sed officia veritatis eum a rem tenetur nisi. Possimus alias fugit illo consequuntur, asperiores
tempora error, dignissimos assumenda culpa earum, eum voluptatum ex.
Natus saepe neque rem corrupti quos a quis assumenda omnis hic accusamus eum eius, labore accusantium aperiam earum soluta beatae id, recusandae nesciunt! Natus commodi omnis non eum nemo maxime magnam provident, sint repellendus nulla adipisci? Odio
officia assumenda qui!
Quo, expedita omnis.
Molestiae consectetur enim laborum sed tempora culpa, doloribus, suscipit ullam rerum exercitationem voluptas commodi nesciunt, modi fugit non provident consequatur. Quas delectus dolores, nemo rem qui unde fugiat inventore! Recusandae consequuntur
eum placeat qui a ratione libero dignissimos ipsum quam.
Officiis nostrum totam dolore neque iusto? Aperiam quia nemo aut omnis quibusdam similique ea ex. Assumenda blanditiis recusandae, iusto esse aut perferendis nulla sed quidem commodi porro, consequatur doloremque repellat. Assumenda quae quaerat consequuntur
necessitatibus incidunt reiciendis libero architecto adipisci.
Ratione, quos officiis!
Qui ipsam cumque quae, quas provident, aliquid eius exercitationem aspernatur in voluptatum ut dolorem corrupti consequuntur ad voluptatibus inventore placeat hic molestias reiciendis! Delectus, quis asperiores! Molestias voluptatum ipsa dolores impedit
labore nisi animi vel sapiente, cupiditate itaque minima commodi!
Quia fugit, odio, quibusdam minima a error voluptate eligendi laudantium id pariatur, blanditiis sint non tenetur corrupti perspiciatis? Dolorum officiis minima obcaecati velit explicabo, voluptate error vitae repellat nostrum natus reiciendis voluptatum
dolore earum eaque nemo incidunt numquam quae culpa!
Cum, porro atque!
Numquam corrupti nesciunt sit amet harum rem. Incidunt ea fugiat provident cumque corrupti, maiores aut esse, recusandae vero repellat ipsum nesciunt minus illum excepturi, soluta nemo veritatis rerum voluptas impedit similique perferendis amet? Eius
dicta mollitia tempora, fuga ex maiores?
Esse explicabo aliquam adipisci iure repellat ipsum laborum illo tenetur quae quas! Assumenda magni expedita provident veritatis fugit necessitatibus quod impedit maxime quibusdam. Nesciunt tempora dolores labore asperiores dolorem quidem, ex iste ipsa,
recusandae, esse impedit iure ratione maxime fugiat?
Veritatis, neque molestias!
Sequi sapiente eligendi laudantium quos qui possimus repudiandae quis laborum modi facilis alias, consectetur natus, minima placeat commodi temporibus quae illo a sint? Omnis ipsa, dolore, praesentium at quisquam aliquid animi odio eius iusto magnam
doloremque ab aspernatur itaque sequi.
Iure facilis repellat possimus voluptatum. Recusandae voluptatibus vitae voluptates doloremque explicabo esse iure quo corporis error, cumque assumenda atque laborum neque. Quo non laboriosam nesciunt, vitae suscipit exercitationem repudiandae sunt
assumenda sed saepe. Quo dignissimos, incidunt veritatis ratione ut quis?
Culpa, magni dolorem!
Quae, praesentium sit veritatis incidunt eligendi a ut at quas animi amet corrupti. Dignissimos modi tempore ratione et dolores. Pariatur facere beatae vero qui laudantium, asperiores consequatur quo officia excepturi atque, deserunt repudiandae, minus
ex? Esse in non nihil laboriosam.
Quod sit nihil eum doloribus deleniti possimus ducimus corporis vero exercitationem et? Vitae veniam, hic repellat placeat deserunt voluptatibus, eius animi natus in quibusdam quia nesciunt sint non quod, molestias minus! Minus excepturi inventore fugit
beatae quas quod tenetur similique?