I’ve used Macs for a number of years - and on macOS, mouse scroll events have been very “precise” for a long time - sending scroll events in fractions of a line. Scroll isn’t a button. It’s an axis. It feels great - because you have direct, continuous control.
I moved to Linux mint a couple years ago and tried to bring my Apple magic touchpad with me. (I prefer it over a mouse while coding.) Linux has APIs which return precise scroll offsets, but a lot of apps don’t use them. Instead, Firefox will wait until I’ve scrolled an entire line worth, then emulate a smooth scrolling event to “catch up” to the scrolling I’ve already done. It feels horrible. Mushy and laggy are the right words. IntelliJ has the same problem - I assume precise scroll events don’t survive whatever event library they’re using. I’ve given up and gone back to a mouse on Linux. And turned smooth scrolling off.
Smooth scrolling is a great idea - but for my money it’s only worth it if you have direct, continuous control over the scrolling position. And unfortunately on Linux (and probably windows) that’s held back by bad software support.
But turning off smooth scrolling made scrolling with those other devices feel better (to me), as I recall.
1) Most mouse scroll wheels feels discrete / have low resolution, so they behave more like discrete press. With my current mouse, each wheel up/down event does scrolling of several (~5) lines.
2) There is scrolling from keyboard (up / down / page-up / page-down), which are definitely discrete events, so any smooth scrolling from that is laggy.
There's also the pointless visual distractions (e.g. firefox blue flash) even after killing web page animations,
/* No blue swipe on tabs when loaded */
.tabbrowser-tab .tab-loading-burst {
display: none !important;
}
Can't find the original reference, looks like plenty of others though, e.g.
https://www.reddit.com/r/FirefoxCSS/comments/11js1cuprevent_...This is my userChrome.css (I also have a megabar remover in there, that's not shown here):
* {
transition-delay: 0ms !important;
/* This is the magic to kill it 100% */
transition-timing-function: steps(1, jump-start) !important;
/* Animation Killer */
animation-delay: 0ms !important;
animation-duration: 0ms !important;
animation-iteration-count: 1 !important;
animation-timing-function: steps(1, jump-start) !important;
}Also I have ui.PrefersReducedMotion=1 set in about:config.