Add: scroll the editor when cursor is outside of the editor
This commit is contained in:
parent
553cc94bc8
commit
5a9ac5ce7d
|
@ -41,6 +41,38 @@ function createSourceEditor(style) {
|
||||||
initLint();
|
initLint();
|
||||||
initAppliesToReport(cm);
|
initAppliesToReport(cm);
|
||||||
|
|
||||||
|
window.addEventListener('wheel', e => {
|
||||||
|
if (e.target.closest('.CodeMirror') || parentScrollable(e.target)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const DELTA_MULTIPLIER = [1, 20, window.innerHeight];
|
||||||
|
scrollBy(
|
||||||
|
cm.getWrapperElement().querySelector('.CodeMirror-scroll'),
|
||||||
|
e.deltaY * DELTA_MULTIPLIER[e.deltaMode]
|
||||||
|
);
|
||||||
|
}, {passive: true});
|
||||||
|
|
||||||
|
function parentScrollable(node) {
|
||||||
|
while (node) {
|
||||||
|
if (node.offsetHeight < node.scrollHeight) {
|
||||||
|
const {overflow} = getComputedStyle(node);
|
||||||
|
if (overflow === 'auto' || overflow === 'scroll') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
node = node.parentNode;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function scrollBy(el, offset) {
|
||||||
|
if (el.scrollBy) {
|
||||||
|
el.scrollBy({top: offset * 40, behavior: 'smooth'});
|
||||||
|
} else {
|
||||||
|
el.scrollTop += offset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function initAppliesToReport(cm) {
|
function initAppliesToReport(cm) {
|
||||||
const DELAY = 500;
|
const DELAY = 500;
|
||||||
let widgets = [], timer, fromLine, toLine, style, isInit;
|
let widgets = [], timer, fromLine, toLine, style, isInit;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user