Функция запуска после x секунд простоя - PullRequest
0 голосов
/ 25 февраля 2020

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

Моя проблема в том, что количество внутренний HTML для сохранения (внутри contenteditable div) обычно массивный. Как десятки тысяч массивных <span> объектов. И мне также нужно очистить его перед отправкой обратно на сервер, который также сильно загружен процессором и памятью из-за этих многочисленных элементов. Моя идея состоит в том, что, если я только автоматически сохраню, когда на холостом ходу, пользовательский опыт улучшится.

Я с трудом догадываюсь, как именно должен быть мой лог c, чтобы autoSave () срабатывал только после 15 секунд простоя.

Итак, вот моя неудачная попытка: (извините за смесь jQuery и простого JS)

let idleTime = 0;

$(window).ready(function() {
    //Increment the idleTime counter every 15 seconds.
    setInterval(timerIncrement, 15000); 
    //Zero the idle timer on key press
    $(this).keyup(function(e) {
      idleTime = 0;
    });
});

function timerIncrement() {
  idleTime++;
  if (idleTime > 1) {
    autoSave();
  }
}

window.autoSave = function autoSave() {
    const form = $(".form");
    const method = form.attr("method").toLowerCase(); // "get" or "post"
    const action = form.attr("action"); // url to submit to 
    loadTextFull(); // load the text to the form's input
    $[method](action, form.serialize(), function(data) {});
};

loadTextFull = function loadTextFull() {
  let textContent = document.getElementById("content").innerHTML.trim();
  let cleanContent = DOMPurify.sanitize(transcriptContent, {
    ALLOWED_TAGS: ["span", "i", "p", "div", "select", "option"],
    ALLOWED_ATTR: [
      "id",
      "data-start-time",
      "data-paragraph-counter",
      "data-paragraph-speaker",
      "data-speaker",
      "contenteditable",
      "name",
      "onchange",
      "class"
    ]
  });
  document.getElementById("text_result_full").value = cleanContent;
};

Моя форма, на случай, если это имеет значение выглядит так:

<form class="form" id="edit_text_65" action="/text/65" accept-charset="UTF-8" data-remote="true" method="post">
  <input type="hidden" name="_method" value="patch">
  <input type="hidden" value="" name="text[result_full]" id="text_result_full">
  <input type="submit" name="commit" value="Save" style="display:none" data-disable-with="Guardar">
</form>

Буду признателен за любую помощь. Заранее спасибо.

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