You can use a temporary event based on two elements, that would be pretty accurate
Check if the item is visible after scrolling
If you want to expand this, you can use several elements and work out an average speed between elements :)
<script> var finalFired = false; var now = new Date().getTime(); function isScrolledIntoView(elem){ var docViewTop = $(window).scrollTop(); var docViewBottom = docViewTop + $(window).height(); var elemTop = $(elem).offset().top; var elemBottom = elemTop + $(elem).height(); return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop)); } $(document).scroll(function(){ if(!finalFired){ if(isScrolledIntoView("div:last")){ finalFired = true; var then = new Date().getTime(); alert(then-now); } } }); </script> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div> <div style="height:100%;">Test</div>
Bloafer
source share