Когда курсор находится за пределами области просмотра, в Mathquill курсор остается скрытым, пока пользователь не прокручивает. Обычно, как и в обычных представлениях калькулятора, математическое поле должно автоматически прокручиваться вместе с курсором, поэтому курсор всегда отображается пользователю.

Поведение других математических редакторов: https://i.imgur.com/1JbRv2F.gifv

Поведение Матквилла: https://i.imgur.com/9E15uS2.gifv

Я попытался проверить, находится ли курсор за пределами области просмотра, тогда я прокручиваю автоматически, но проблема в том, что курсор теряет фокус и становится нулевым элементом, и я не могу перейти к нему.

0
AndroLife 25 Ноя 2018 в 15:09

1 ответ

Лучший ответ

Я решил эту проблему, используя следующий код:

Сначала я добавил функцию для определения того, находится ли курсор за пределами области просмотра (источник: https://stackoverflow.com/a/15203639/3880171 < / а>)

function isElementVisible(el) {
    var rect = el.getBoundingClientRect(),
        vWidth = window.innerWidth || document.documentElement.clientWidth,
        vHeight = window.innerHeight || document.documentElement.clientHeight,
        efp = function (x, y) {
            return document.elementFromPoint(x, y)
        };

    // Return false if it's not in the viewport
    if (rect.right < 0 || rect.bottom < 0
        || rect.left > vWidth || rect.top > vHeight)
        return false;

    // Return true if any of its four corners are visible
    return (
        el.contains(efp(rect.left, rect.top))
        || el.contains(efp(rect.right, rect.top))
        || el.contains(efp(rect.right, rect.bottom))
        || el.contains(efp(rect.left, rect.bottom))
    );
}

Я добавил событие onKeyUp в mathview:

<span id="expression" onkeyup="onEditorKeyPress()"></span>

Наконец, волшебство прокрутки выполняется следующим образом:

function scrollToCursor() {
    mathField.focus();
    var cursor = document.querySelector(".mq-cursor");
    if (cursor != null && !isElementVisible(cursor)) {
        document.querySelector(".mq-cursor").scrollIntoView();
    }
}

function onEditorKeyPress() {
    scrollToCursor();
}
1
AndroLife 26 Ноя 2018 в 15:57