You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
1.9 KiB
87 lines
1.9 KiB
1 year ago
|
import * as CSS from '../lib/css';
|
||
|
import * as DOM from '../lib/dom';
|
||
|
import cls, {
|
||
|
addScrollingClass,
|
||
|
removeScrollingClass,
|
||
|
} from '../lib/class-names';
|
||
|
import updateGeometry from '../update-geometry';
|
||
|
import { toInt } from '../lib/util';
|
||
|
|
||
|
export default function(i) {
|
||
|
bindMouseScrollHandler(i, [
|
||
|
'containerWidth',
|
||
|
'contentWidth',
|
||
|
'pageX',
|
||
|
'railXWidth',
|
||
|
'scrollbarX',
|
||
|
'scrollbarXWidth',
|
||
|
'scrollLeft',
|
||
|
'x',
|
||
|
'scrollbarXRail',
|
||
|
]);
|
||
|
bindMouseScrollHandler(i, [
|
||
|
'containerHeight',
|
||
|
'contentHeight',
|
||
|
'pageY',
|
||
|
'railYHeight',
|
||
|
'scrollbarY',
|
||
|
'scrollbarYHeight',
|
||
|
'scrollTop',
|
||
|
'y',
|
||
|
'scrollbarYRail',
|
||
|
]);
|
||
|
}
|
||
|
|
||
|
function bindMouseScrollHandler(
|
||
|
i,
|
||
|
[
|
||
|
containerHeight,
|
||
|
contentHeight,
|
||
|
pageY,
|
||
|
railYHeight,
|
||
|
scrollbarY,
|
||
|
scrollbarYHeight,
|
||
|
scrollTop,
|
||
|
y,
|
||
|
scrollbarYRail,
|
||
|
]
|
||
|
) {
|
||
|
const element = i.element;
|
||
|
|
||
|
let startingScrollTop = null;
|
||
|
let startingMousePageY = null;
|
||
|
let scrollBy = null;
|
||
|
|
||
|
function mouseMoveHandler(e) {
|
||
|
element[scrollTop] =
|
||
|
startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);
|
||
|
addScrollingClass(i, y);
|
||
|
updateGeometry(i);
|
||
|
|
||
|
e.stopPropagation();
|
||
|
e.preventDefault();
|
||
|
}
|
||
|
|
||
|
function mouseUpHandler() {
|
||
|
removeScrollingClass(i, y);
|
||
|
i[scrollbarYRail].classList.remove(cls.state.clicking);
|
||
|
i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);
|
||
|
}
|
||
|
|
||
|
i.event.bind(i[scrollbarY], 'mousedown', e => {
|
||
|
startingScrollTop = element[scrollTop];
|
||
|
startingMousePageY = e[pageY];
|
||
|
scrollBy =
|
||
|
(i[contentHeight] - i[containerHeight]) /
|
||
|
(i[railYHeight] - i[scrollbarYHeight]);
|
||
|
|
||
|
i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);
|
||
|
i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);
|
||
|
|
||
|
i[scrollbarYRail].classList.add(cls.state.clicking);
|
||
|
|
||
|
e.stopPropagation();
|
||
|
e.preventDefault();
|
||
|
});
|
||
|
}
|