美文网首页Web前端之路
JavaScript命令模式的撤销操作

JavaScript命令模式的撤销操作

作者: 零度的冰 | 来源:发表于2019-12-24 13:46 被阅读0次

命令模式的撤销操作

撤销操作的实现一般是给命令对象增加一个名为unexecude或者undo的方法,在该方法里执行execute的反向操作,代码如下:

var MoveCommand = function (receiver,pos) {
    this.receiver = receiver;
    this.pos = pos;
    this.oldPos = null;
};
MoveCommand.prototype.execute = function () {
    this.receiver.start('left',this.pos,1000,'strongEaseOut');
    this.oldPos = this.receiver.dom.getBoundingClienRect()[this.receiver.propertyName];//记录初始位置
};
MoverCommand.prototype.undo = function () {
    this.receiver.start('left',this.oldPos,1000,'strongEaseOut');
    //撤销操作,回到之前运动的位置
};
var moveCommand;
moveBtn.onclick = function() {
    var animate = new Animate(ball);
    moveCommand = new MoveCommand(animate,pos.value);
    moveCommand.execute();
};
cancelBtn.onclick = function () {
    moveCommand.undo();
}

撤销和重做

下面代码将讲述如何撤销一系列的命令

var Ryu = {
    attack :function () {
        console.log('攻击')
    },
    defense:function() {
        console.log('防御')
    },
    jump:function() {
        conosle.log('跳跃')
    },
    crouch:function () {
        console.log('蹲下')
    }
};

var makeCommand = function (receiver,state) {
    return function () {
        receiver[state]();
    }
};
var commands = {
    "119":"jump",
    "115":"crouch",
    "97":"defense",
    "100":"attack"
};
var commandStack = [];
doccument.onkeypress = function (ev) {
    var keyCode = ev.keyCode,
        command = makCommand(Ryu,commands[keyCode]);
    if(command) {
        cammand();
        commandStack.push(command);//保存刚才执行的动作
    }
};
//撤销的操作
document.getElementById('replay').onclick = function () {
    var command;
    while(command = commandStack.shift()) {
        command();
    }
}

相关文章

  • JavaScript命令模式的撤销操作

    命令模式的撤销操作 撤销操作的实现一般是给命令对象增加一个名为unexecude或者undo的方法,在该方法里执行...

  • vim简要使用说明

    编辑模式 撤销操作 命令模式下按一下“u”撤销一步动作(大写的“U”撤销所有操作),默认对多撤销50次。“Ctrl...

  • Vim查找替换

    一、字符的替换及撤销(Undo操作) 1.替换和撤销(Undo)命令替换和Undo命令都是针对普通模式下的操作命令...

  • VIM常用语法

    一、字符的替换及撤销(Undo操作) 1.替换和撤销(Undo)命令 替换和Undo命令都是针对普通模式下的操作 ...

  • 02.设计模式之命令模式

    命令模式,把请求封装成一个对象,可以记录请求日志,可以进行撤销操作;可以撤销请求这个是命令模式的核心能力了: 秉承...

  • Python设计模式之命令模式

    命令模式 现在多数应用都有撤销操作。虽然难以想象,但在很多年里,任何软件中确实都不存在撤销操作。撤销操作是在197...

  • Linux-vi编辑器开发必备操作

    操作模式 Commmand mode命令模式等待用户输入命令eg.撤销,剪切,复制d:删除当前字符dd:删除至行末...

  • JavaEE进阶知识学习-----设计模式---命令模式

    命令模式定义 命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象,命令模式支持可撤销的操作...

  • 设计模式-命令模式

    命令模式:将请求封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象,命令模式也支持撤销操作命令模式好比行...

  • 命令模式(Command Pattern)

    命令模式:将请求封装成对象,以便使用不同的请求,队列,或日志,来参数化其他对象。命令模式也支持可撤销的操作。 命令...

网友评论

    本文标题:JavaScript命令模式的撤销操作

    本文链接:https://www.haomeiwen.com/subject/tazxoctx.html