Get mousewheel distance in pixels
Even with support for the "wheel" event's deltaY, getting the actual distance scrolled is inconsistent and a pain. This fiddle demonstrates getting it by just seeing how far the browser interprets the scroll in pixels.
by IceCreamYou
HTML
<div id=wrpr>
<canvas id=cvs></canvas>
<div id=scrl>
<div id="inner"></div>
</div>
</div>
<div id=log></div>
CSS
#wrpr {
position: relative;
width: 300px;
overflow: hidden;
}
#cvs {
background-color: red;
width: 300px;
height: 200px;
position: relative;
z-index: 1;
}
#scrl {
background-color: rgba(0, 0, 255, 0.5);
padding-right: 100px;
position: absolute;
width: 300px;
height: 200px;
top: 0;
left: 0;
overflow-y: auto;
overflow-x: hidden;
z-index: 0;
}
#inner {
width: 300px;
height: 16384px;
}
JavaScript
var scroller = document.getElementById('scrl'),
logElem = document.getElementById('log'),
timerId = -1,
timerFn = function() {
scroller.style.zIndex = 0;
};
scroller.scrollTop = 8192;
scroller.addEventListener('wheel', function(event) {
log([event.deltaMode, Math.round(event.deltaY), scroller.scrollTop - 8192])
scroller.scrollTop = 8192;
clearTimeout(timerId);
timerId = setTimeout(timerFn, 100);
//event.preventDefault();
});
document.getElementById('cvs').addEventListener('wheel', function(event) {
log([event.deltaMode, Math.round(event.deltaY)]);
scroller.style.zIndex = 1;
timerId = setTimeout(timerFn, 100);
event.preventDefault();
});
function log(s) {
var d = document.createElement('div');
d.textContent = typeof s === 'string' ? s : JSON.stringify(s);
logElem.insertBefore(d, logElem.firstChild);
}