I found an anomaly in the scrolling position when using Element.prototype.scrollBy to scroll DOM elements. For example, when using scrollBy(0, 20) to scroll the element, the scrollTop read immediately after the scroll is completed is the expected 20. However, after adding some delay, it becomes 40. It seems like after scrolling a distance of ‘a’, the scrollTop read after the delay becomes ‘2a’. Below is the minimal case I tried to write.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="wrapper" style="overflow-y: scroll;height: 50px;">
<div id="scroller" style="height: 200px;">
</div>
</div>
<script>
const wrapper = document.getElementById('wrapper');
wrapper.scrollBy(0, 20)
console.log(wrapper.scrollTop) // will output 20
setTimeout(() => {
console.log(wrapper.scrollTop) // will output 40
}, 500)
</script>
</body>
</html>