JS-History-Recoder 3

HTML

<button id="prev" type="button">上一步</button>
<button id="next" type="button">下一步</button>
<br><br>
<textarea id="text" cols="5" style="width:300px"></textarea>

JavaScript

var prev = document.getElementById('prev');
var next = document.getElementById('next');
var text = document.getElementById('text');

var size = 6;    //佇列大小,需空一個位置給佇列結尾
var front = 0;   //佇列開頭
var real = 1;    //佇列結尾的下一個位置
var curr = 0;    //步驟當前位置
var queue = new Array(size); //佇列容器
queue[0] = "";   //設定第一個元素為空白

prev.onclick = function() {
		//判斷是不是在開頭位置
    if (curr === front){
        alert('沒有上一步');
        return;
    }
    //將當前位置移動到上一步
    curr = (curr + size - 1) % size;
    text.value = queue[curr];
}
next.onclick = function() {
		//判斷是不是在結尾的位置
		var next = (curr + 1) % size;
    if (next === real){
        alert('沒有下一步');
        return;
    }
    //將當前位置移動到下一步
    curr = next;
    text.value = queue[curr];
}
text.addEventListener('input', function textWrite() {
    //判斷當前位置是不是在結尾
    var next = (curr + 1) % size;
    if (next === real) {
    		//判斷佇列是否已滿
    		if ((real + 1) % size === front) {
        		//覆蓋開頭的紀錄
        		front = (front + 1) % size;
        }
    }
    //設到當前位置到下個位置上
    curr = next;
    //將文字加入佇列
    queue[curr] = text.value;
    //將結尾設到當前位置的下個位置上
    real = (curr + 1) % size;
});