Вы можете создать простой дебат с помощью setTimeout, чтобы записывать состояние только после x миллисекунд без ввода. Состояние может быть просто сохранено в массиве. попсовые элементы для этого.
Вот простое доказательство концепции. Я не горжусь этим, но этого должно быть достаточно, чтобы получитьты начал. Обратите внимание, что я использовал jQuery для удобства, но сделать это довольно просто в vanilla JS.
$(function() {
var debounce = null, //ref for debouncer timeout
$textarea = $("#myTextarea"),
$undo = $("#undo"),
$undocount = $("#undo span"),
history = [];
$textarea.on("keyup", function() {
clearTimeout(debounce); //clear the debounce
debounce = setTimeout(function() {
history.push($textarea.val());
$undocount.text(history.length);
}, 300);
}).on("blur", function() {
history.pop();
});
$undo.on("click", function() {
$undocount.text(history.length);
$textarea.val(history.pop());
})
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea id="myTextarea"></textarea>
<button id="undo">UNDO [<span>0</span>]</button>