js实现撤销恢复功能

Js实现撤销恢复功能

之前一个项目要自己写个前端插件,其中一个的功能是实现对表格(table)的撤销和恢复功能,在网上百度了一大堆也没有找到合适的方法,后来灵光一闪,想到了一个简单的方法:用数组保存之前对表格的操作,执行撤销和恢复的时候去取数组的最后一个里面的信息实现操作。

1.      先定义2个数组,分别对应撤销操作和恢复操作。

var__gridundo = [];                 //撤销操作存放数据

  var __gridredo = [];                 //恢复操作存放数据

2. 在对表格操作时保存操作信息到对应的操作。

//删除表格的一行

jxd.opticket.grid.deleteRow = function(index){

         …………………….//删除操作

         //用于撤销和恢复的信息

                 var undo = {};

      undo['index'] = index;//index表示表格的行索引

      undo['oper'] ='delete';//oper表示对表格的操作类型

      undo['data'] = data;//data表示被删除的行信息

   __gridundo.push(clone(undo));//把撤销信息加到数组中

   __gridredo.splice(0,__gridredo.length);//这里需要把恢复数组中内容清空,因为撤销和恢复是相对的操作,比如删除-->撤销-->恢复—>撤销,这样的操作是可以的,但是如果删除-->撤销-->删除,这样的操作就不能再恢复了,可以参照word文档的撤销和恢复来理解这句。

}

/**

     *撤销之前行操作

        *

     */

   jxd.opticket.grid.undo= function(){

         //判断撤销数组中有没有数据

if(__gridundo.length ==0){

            return ;

         }

         var table = $("#"+__ids.itemsGrid);

         var undo = __gridundo[__gridundo.length- 1];//最后一个就是最近的操作

         var index = undo['index'];//表格的行索引

         var oper = undo['oper'];//对表格的操作

         var up; //行上移还是下移

         var data ;//行数据

         if(oper =='move'){

            up= undo['up'];

         }else{

            data= undo['data'];

         }

         if(oper =='insert'){//如果之前对表格的操作是添加一行,那么撤销就是删除刚刚添加的行

            _deleteRow(parseInt(index));//调用删除行操作,这里的删除行的方法不是上面的删除行方法,因为这里的删除行方法里不需要向撤销数组中添加撤销的信息

         }elseif(oper == 'delete'){

            _insertRow(parseInt(index),data);

        }elseif(oper == 'move'){

            if(up ==true || up == 'True'){

                _moveRow((parseInt(index)- 1),false);

            }else{

                _moveRow((parseInt(index)+ 1),true);

             }

          }

         __gridredo.push(clone(undo));//把现在撤销的数据加到恢复的数组中

      __gridundo.splice(__gridundo.length- 1,1);//删除撤销数组中最后一个数据,因为已经撤销过了。

}

/**

    * 恢复之前行撤销的操作

    *

    */

jxd.opticket.grid.redo = function(){

      if(__gridredo.length ==0){

            return ;

         }

         var table = $("#"+__ids.itemsGrid);

         var redo = __gridredo[__gridredo.length- 1];

         var index = redo['index'];

         var oper = redo['oper'];

         var up;

         var data ;

         if(oper =='move'){

            up= redo['up'];

         }else{

            data= redo['data'];

         }

         if(oper =='insert'){

            _insertRow(parseInt(index),data);

         }else if(oper == 'delete'){

            _deleteRow(parseInt(index));

         }else if(oper == 'move'){

            if(up ==true || up == 'True'){

                _moveRow((parseInt(index)),true);

            }else{

                _moveRow((parseInt(index)),false);

            }

         }

         __gridundo.push(clone(redo));

      __gridredo.splice(__gridredo.length- 1,1);

}

到这里简单的js实现撤销和恢复操作就完成了

pdf.js 是一个用 JavaScript 编写的开源 PDF 阅读器,它可以在网页上直接查看 PDF 文件。要为 pdf.js 添加撤销功能,需要进行以下步骤: 1. 安装依赖:pdf.js 依赖于 pdfjs-dist 包,需要先安装该包。可以使用 npm 安装:`npm install pdfjs-dist`。 2. 导入 pdf.js:在 HTML 文件中导入 pdf.js 文件,可以使用以下代码: ```html <script src="pdf.js"></script> ``` 3. 加载 PDF 文件:使用 pdf.js 的 PDFJS.getDocument() 方法加载 PDF 文件。可以使用以下代码: ```javascript PDFJS.getDocument(url).then(function(pdf) { // 处理 PDF 文件 }); ``` 4. 获取页面:使用 PDF 文件的 getPage() 方法获取 PDF 页面对象。可以使用以下代码: ```javascript pdf.getPage(pageNumber).then(function(page) { // 处理页面 }); ``` 5. 获取文本:使用 PDF 页面对象的 getTextContent() 方法获取页面文本内容。可以使用以下代码: ```javascript page.getTextContent().then(function(textContent) { // 处理文本内容 }); ``` 6. 添加撤销功能:为了实现撤销功能,需要保存历史状态。可以使用数组保存每个状态,然后在撤销时回退到上一个状态。可以使用以下代码实现: ```javascript let history = []; let currentIndex = -1; function saveState(state) { history.push(state); currentIndex++; } function undo() { if (currentIndex > 0) { currentIndex--; let state = history[currentIndex]; // 恢复状态 } } ``` 在每次编辑后,调用 saveState() 方法保存当前状态。在需要撤销时,调用 undo() 方法回退到上一个状态。 7. 更新页面:在撤销时,需要更新 PDF 页面以显示恢复后的状态。可以使用 PDF 页面对象的 render() 方法重新渲染页面。可以使用以下代码: ```javascript page.render({ canvasContext: context, viewport: viewport }); ``` 在渲染页面时,需要传入画布上下文和视口参数。 以上就是为 pdf.js 添加撤销功能的步骤。需要注意的是,pdf.js 并不是一个完整的 PDF 编辑器,撤销功能只适用于部分编辑操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐楠_01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值