我正在创建一个程序,该程序将使用堆栈作为数据结构。该程序的主要功能是“重做”和“撤消”。用户将在GUI上键入任何内容,并且将有两个按钮,即重做和撤消。我想将每个单词存储在特定的节点上,以便每当用户按下撤消时,将应用文本框的先前状态。
问题是,每当用户停止键入时如何捕获数据?我应该得到一个计时器吗?还是应该创建一个条件,将每个单词存储在节点上?
答案 0 :(得分:0)
您可以使用setTimeout创建一个简单的防抖动,以便仅在无输入x毫秒后记录状态。状态可以只存储在数组中。将pop()项从中删除以进行撤消。
这是一个简单概念证明。我对此并不感到骄傲,但足以让您入门。请注意,为方便起见,我使用了jQuery,但在原始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>