pdf. js расширение вьюера запаздывает - PullRequest
3 голосов
/ 16 января 2020

Я расширил просмотрщик pdf.js, чтобы я мог "вставить .svgs в .pdf".

Это означает, что я просто вставил дополнительные imageWrapper на каждую страницу div и добавил .svgs как objects внутри. Результат выглядит так, как будто .svgs находятся внутри .pdf, хотя, конечно, они просто являются частью зрителя.

Для тех, кто не знаком: здесь вы можете найти демо зрителя; просто просмотрите .pdf-страницу, и вы поймете мое объяснение.

Однако, если я просто прокручиваю вверх / вниз, зритель довольно не отвечает и запаздывает, когда .svgs рядом с окном просмотра. Может быть уместно добавить, что это поведение не отображается, если я вставляю видео или изображения. Кроме того, .svgs довольно большие (в 3 раза больше 3 МБ), но если у меня они есть на простом html -сайте с некоторым слепым текстом, прокрутка вообще не проблема.

Для меня это скорее похоже, что это какая-то проблема раскладки . Тем не менее мне не удалось отследить причину (ы):

Инструмент производительности из Chrome указал мне на файл ui_utils.js и, в частности, на этот фрагмент кода:

function watchScroll(viewAreaElement, callback) {
  let debounceScroll = function(evt) {
    if (rAF) {
      return;
    }
    // schedule an invocation of scroll for next animation frame.
    rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {
      rAF = null;

      let currentX = viewAreaElement.scrollLeft;
      let lastX = state.lastX;
      if (currentX !== lastX) {
        state.right = currentX > lastX;
      }
      state.lastX = currentX;
      let currentY = viewAreaElement.scrollTop;
      let lastY = state.lastY;
      if (currentY !== lastY) {
        state.down = currentY > lastY;
      }
      state.lastY = currentY;
      callback(state);
    });
  };

  let state = {
    right: true,
    down: true,
    lastX: viewAreaElement.scrollLeft,
    lastY: viewAreaElement.scrollTop,
    _eventHandler: debounceScroll,
  };

  let rAF = null;
  viewAreaElement.addEventListener('scroll', debounceScroll, true);
  return state;
}

Это имело для меня смысл, поскольку такие команды, как scrollLeft запускают перекомпоновку, но комментирование детали с помощью currentX и currentY не изменило поведение заметно.

Я был бы признателен за любые советы по решению этой проблемы и особенно некоторые объяснения о поведение прокрутки pdf.js очень много.

РЕДАКТИРОВАТЬ : Тем временем я пришел к выводу, что это может быть просто проблемой сбора мусора. Может быть, сокрытие .svgs помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...