直播平臺搭建原始碼,純js實現編輯器撤消/重做
直播平臺搭建原始碼,純js實現編輯器撤消/重做
核心JS
//基類 var Core = function() {} Core.prototype = { arrayPrevStep: [], //存放撤消操作方法列表 arrayNextStep: [], //存放恢復操作方法列表 triggerUndo: false, //撤消操作標記 triggerRedo: false, //恢復操作標記 _undo: null, //撤消按鈕 _redo: null, //恢復按鈕 setStep: function(func) { //操作之後觸發儲存的方法(呼叫後臺儲存方法) if (this.triggerUndo) { this.arrayNextStep.push(func); if (this._redo.classList.contains('unactive')) { this._redo.classList.remove('unactive'); } } else { if (!this.triggerRedo) Core.prototype.arrayNextStep = []; this.arrayPrevStep.push(func); if (this.arrayPrevStep.length > 20) { this.arrayPrevStep.shift(); } if (this._undo.classList.contains('unactive')) { this._undo.classList.remove('unactive'); } if (this.arrayNextStep.length < 1) { this._redo.classList.add('unactive'); } } Core.prototype.triggerUndo = false; Core.prototype.triggerRedo = false; }, _selectionNavUndo: function() { var _this = this; _this._undo.addEventListener('click', function() { var head = _this.arrayPrevStep.length - 1; if (head !== -1) { Core.prototype.triggerUndo = true; try { _this.arrayPrevStep[head](); } catch (e) { _this.arrayPrevStep = []; } Core.prototype.arrayPrevStep = _this.arrayPrevStep.slice(0, head); if (_this.arrayPrevStep.length === 0 && !_this._undo.classList.contains('unactive')) { _this._undo.classList.add('unactive'); } } }); }, _selectionNavRedo: function() { var _this = this; _this._redo.addEventListener('click', function() { var head = _this.arrayNextStep.length - 1; if (head !== -1) { Core.prototype.triggerRedo = true; try { _this.arrayNextStep[head](); Core.prototype.arrayNextStep = _this.arrayNextStep.slice(0, head); } catch (e) { Core.prototype.arrayPrevStep = []; Core.prototype.arrayNextStep = []; Core.prototype.triggerUndo = false; Core.prototype.triggerRedo = false; console.error(e); } if (_this.arrayNextStep.length === 0 && !_this._redo.classList.contains('unactive')) { _this._redo.classList.add('unactive'); } } }); } } Core.prototype.constructor = Core; Core.prototype._undo = document.querySelector('.undo'); Core.prototype._redo = document.querySelector('.redo'); // 初始化撤消/恢復按鈕 Core.prototype._selectionNavUndo(); Core.prototype._selectionNavRedo(); // 操作場景(輸入框改變) var EditorText = function(el) { var _this = this; this._targetObject = el; this._targetObject.addEventListener("change", function(e) { var saveVal = _this._text; _this._text = this.value; _this.setText(_this._text, saveVal); }) } // 繼承Core基礎類,並新增EditorText特有方法 EditorText.prototype = Object.assign(Object.create(Core.prototype), { _targetObject: null, _text: "", setText: function(newValue, oldValue) { var _this = this; _this._targetObject.value = newValue; _this.setStep(function() { _this.setText(oldValue, newValue) }) } }) EditorText.prototype.constructor = EditorText; document.querySelectorAll("input").forEach(item => { // 建立監聽 new EditorText(item); });
HTML
<html> <body> <style> .main { margin: 400px auto; width: 500px; } .btn-box { margin-top: 20px; } button{ background-color: #07c160; color: #ffffff; border: none; padding: 6px 18px; border-radius: 3px; } button.unactive{ cursor: no-drop; background-color: #f6f6f6; color: #999999; } </style> <div> <div> <input type="text" name="name" placeholder="請輸入姓名"> <input type="text" name="age" placeholder="請輸入年齡"> </div> <div> <button class="undo unactive">撤銷</button> <button class="redo unactive">恢復</button> </div> </div> <script> //核心js </script> </body> </html>
以上就是直播平臺搭建原始碼,純js實現編輯器撤消/重做, 更多內容歡迎關注之後的文章
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2928233/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 直播平臺原始碼,純JS實現左右滑動輪播圖原始碼JS
- 直播平臺搭建原始碼,bootstrap實現圖片輪播效果原始碼boot
- PHP直播平臺原始碼搭建教程PHP原始碼
- 直播平臺搭建原始碼,使用EasyExcel實現匯入匯出功能原始碼Excel
- 快速運營搭建直播軟體平臺直播原始碼!原始碼
- 直播平臺搭建原始碼,java相簿製作原始碼Java
- 直播系統原始碼--搭建直播平臺的奠基石原始碼
- 直播平臺原始碼,FlinkSQL實現行轉列原始碼SQL
- Linux平臺的4個最佳開原始碼編輯器Linux原始碼
- 直播原始碼如何搭建一個屬於自己的直播平臺?原始碼
- 直播平臺原始碼,迴圈滾動RecyclerView的實現原始碼View
- 直播平臺原始碼開發,簽到功能的實現原始碼
- 4個最流行的Linux平臺開原始碼編輯器Linux原始碼
- 直播平臺搭建,JS實現頁面下拉載入資料操作JS
- 直播平臺搭建原始碼,更改圖片透明度原始碼
- 直播平臺搭建原始碼,uniapp progress進度條原始碼APP
- 影片直播app原始碼,純JS實現旋轉木馬/3d相簿APP原始碼JS3D
- 成品直播原始碼,實現在平臺內部的搜尋原始碼
- 直播平臺原始碼,RecycleView實現item重疊水平滑動原始碼View
- 直播平臺搭建,實現圖片縮圖功能
- 直播平臺搭建原始碼,qt自定義滑動按鈕原始碼QT
- 直播平臺原始碼,Android實現密碼顯示與隱藏原始碼Android密碼
- EditRocket (原始碼編輯器)原始碼
- 影片直播app原始碼,純css實現橫向滾動APP原始碼CSS
- app直播原始碼,平臺登入頁面實現和修改密碼頁面實現APP原始碼密碼
- 直播平臺原始碼,多種方法實現圖片複雜排列原始碼
- 直播平臺原始碼,Android自定義View實現呼吸燈效果原始碼AndroidView
- 搭建自己的直播平臺,實現exe單例模式單例模式
- 搭建直播平臺,uniapp捲軸置頂實現APP
- PHP直播平臺原始碼伺服器併發模型PHP原始碼伺服器模型
- 直播平臺原始碼,js 時間戳轉為日期格式原始碼JS時間戳
- 如何搭建直播平臺?直播平臺搭建需要注意什麼?
- Sublime Text——高效的跨平臺程式碼編輯器
- 一對一直播平臺原始碼,如何實現圖片釋出原始碼
- 直播帶貨平臺原始碼,利用ProgressBar實現垂直、水平進度條原始碼
- 手機直播軟體系統搭建原始碼,聚合採集器採集平臺介面!原始碼
- 直播 App 原始碼搭建簡易直播平臺及個人開發直播系統的難點APP原始碼
- Atom for Mac平臺文字編輯器Mac