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.
86 lines
1.9 KiB
86 lines
1.9 KiB
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(); |
|
}); |
|
}
|
|
|