JSFiddle - React, Tailwind, and code Playground

HTML

<p>Lorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempus.</p>
<p>Lacus wisi Curabitur dolor lacus cursus interdum amet Sed dolor convallis. Penatibus at sociis tempor tempor facilisis nulla venenatis urna Sed tellus. Leo ipsum Nulla id tellus a tempor facilisis nunc Phasellus vitae. Morbi sed Lorem magnis laoreet Nam tincidunt magna aliquet Integer lorem. Mauris fringilla nisl ut eget tellus amet Nulla ante metus In. Dapibus Vestibulum.</p>
<p>Non quam at ac dis tellus semper nibh Sed pede In. Curabitur Curabitur risus fringilla nibh id habitasse Vestibulum habitasse non malesuada. Elit pharetra eget Ut justo id a felis cursus eget urna. Parturient vel porttitor mi Vivamus dictumst parturient enim Lorem et hendrerit. Id semper sed pede Curabitur Ut sociis Lorem congue malesuada a. </p>
<p>Nunc metus Vestibulum leo dui vel congue vestibulum feugiat Integer semper. Tempus auctor dui condimentum malesuada sed quis Nam Quisque metus urna. Semper Aenean Nullam interdum et sagittis ac amet pede aliquet Quisque. Nibh eget magna tellus Ut dui tincidunt Vestibulum libero nunc Pellentesque. Nam Phasellus eu ac orci lorem nunc tincidunt.</p>
<p>Dictum Sed et egestas id nunc nisl pretium Praesent velit pretium. Sit urna hendrerit urna Lorem Aenean Curabitur consectetuer velit Ut Sed. Eleifend Phasellus In lacinia dui et rutrum penatibus semper tellus consequat. Ac sed et condimentum egestas tellus et Sed mauris Aliquam ac. Condimentum Nullam ac Nulla et libero Morbi neque mus in dolor. Volutpat faucibus eu et nulla.</p>
<p>Gravida euismod ut feugiat nulla et sagittis Nulla magnis sodales...

JavaScript

/* Smooth scroll */
Math.easeOut = function (t, b, c, d) { t /= d; return -c * t*(t-2) + b; };

(function() { // do not mess global space
var
  interval, // scroll is being eased
  mult = 0, // how fast do we scroll
  dir = 0, // 1 = scroll down, -1 = scroll up
  steps = 50, // how many steps in animation
  length = 30; // how long to animate
function MouseWheelHandler(e) {
  e.preventDefault(); // prevent default browser scroll
  clearInterval(interval); // cancel previous animation
  ++mult; // we are going to scroll faster
  var delta = -Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
  if(dir!=delta) { // scroll direction changed
    mult = 1; // start slowly
    dir = delta;
  }
  for(var tgt=e.target; tgt!=document.documentElement; tgt=tgt.parentNode) {
    var oldScroll = tgt.scrollTop;
    tgt.scrollTop+= delta;
    if(oldScroll!=tgt.scrollTop) break;
  }
  var start = tgt.scrollTop;
  var end = start + length*mult*delta; // where to end the scroll
  var change = end - start; // base change in one step
  var step = 0; // current step
  interval = setInterval(function() {
    var pos = Math.easeOut(step++,start,change,steps);
    //window.scrollTo(0,pos);
    tgt.scrollTop = pos;
    if(step>=steps) { // scroll finished without speed up - stop by easing out
      mult = 0;
      clearInterval(interval);
    }
  },10);
}
window.addEventListener("mousewheel", MouseWheelHandler, false);
window.addEventListener("DOMMouseScroll", MouseWheelHandler, false);
})();