Есть некоторые проблемы с вышеуказанными кодами.Я попытался использовать их и обнаружил, что сначала мне пришлось дважды нажать «Отменить», прежде чем он начал спускаться по массиву.
Итак, скажем, я сделал [0] сделано [1] сделано [2].done [2] был просто сохранен в массив.Если я нажму "Отменить", это вернет.Вы этого не хотите.Он заменяет то, что уже есть.Но снова нажмите «Отменить», затем вы получите свой предыдущий код.
Мой, так как у меня есть редактор перетаскивания с различными режимами редактирования.Перетащите элементы.Редактировать элементы HTML / Картинки.Сортировка элементов.
$ ("# neoContentContainer") содержит все редакторы html.И вы можете вызывать editor_add по щелчкам, mousedowns и т. Д., Видя, что это функция, которую вы можете легко вызвать.
function editor_add(){
undo.push($("#neoContentContainer").html());
update_buttons();
}
function editor_undo(){
var item = undo.pop();
// prevent undo/redo from undoing to the same HTML currently shown.
if(item == $("#neoContentContainer").html()){
redo.push(item);
item = undo.pop();
}
if(item){
redo.push(item);
$("#neoContentContainer").html(item);
}
update_buttons();
}
function editor_redo(){
var item = redo.pop();
if(item == $("#neoContentContainer").html()){
undo.push(item);
item = redo.pop();
}
if(item){
undo.push(item);
$("#neoContentContainer").html(item);
}
update_buttons();
}
function update_buttons(){
if(undo.length == 0){
$('button[data-id="undo"]').attr('disabled',true);
} else {
$('button[data-id="undo"]').attr('disabled',false);
}
if(redo.length == 0){
$('button[data-id="redo"]').attr('disabled',true);
} else {
$('button[data-id="redo"]').attr('disabled',false);
}
}
https://jsfiddle.net/s1L6vv5y/
Не идеально, но получите суть этого,(Все еще интересно, когда мы сможем получить ОДНУ ЛИНИЮ ЛИНИИ ЛИНИИ !!!! DEVS AT STACKOVERFLOW !!:)
Поэтому, когда моя страница загружается, я запускаю: editor_add ();Потому что когда они что-то делают, нужно что-то отменять!
Теперь каждый раз, когда они что-то отбрасывают, сортируйте вещи, я запускаю editor_add ();Взял меня весь день, теперь понимая, как все просто, это работает очень хорошо для меня.
Так что с этим, что хорошо ....
var history = function() {
this.done = this.reverted = [];
var self = this;
this.add = function(item) {
self.done.push(item);
};
this.undo = function() {
if(done.length >= 3){
var undo_item = self.done.pop();
self.reverted.push(undo_item);
}
var item = self.done.pop();
if (item) {
self.reverted.push(item);
}
return item;
};
this.redo = function() {
if(reverted.length >= 3){
var revert_item = self.reverted.pop();
self.done.push(revert_item);
}
var item = self.reverted.pop();
if (item) {
self.done.push(item);
}
return item;
};
};
Вы не хотитеочищайте повторы до тех пор, пока вы не пройдете через массив.
(угадайте, что вход в систему до редактирования помогает!)