目录
在版本0.0.4中,使用prototype和闭包组织代码。考虑到以后要添加各种形状,笔刷,滤镜,代码复杂度提升,使用prototype和闭包模拟类系统比较累,所以学习了《JavaScript高级程序设计(第4版)》的第26 章 模 块,使用类来组织代码。
主类和组件类分工
board.js
是Board主类
。Board主类
中有事件对象ev
,用来作为各个组件的事件通讯。比如:Board主类
通过触发事件board:reset
,调用各个Controller
类的onBoardReset()
。
Board主类
中的controllers
属性中保存着controller
集合,this.controllers[name] = controller;
身上还挂载着controller。shapes
也是一样。
Board主类
中保存着绘图环境context
,绑定了鼠标事件。在鼠标事件中调用当前的shape
进行绘图。且BrushBtn
中点击事件,会切换当前shape
。
组件之间的通信
组件之间的通信是通过Board主类
中的事件对象ev
。比如:BrushBtn
中点击事件,会切换当前的激活按钮。每个按钮监听事件btn:change
来改变当前的激活状态,这个方法写进了父类。
btnChange() { return (ctrl) => { if (this === ctrl) { // 貌似有toggle函数,不必喷。本文主题是教学 if (!this.btn.classList.contains('active')) { this.btn.classList.add('active'); } } else { if (this.btn.classList.contains('active')) { this.btn.classList.remove('active'); } } } }
利用响应式函数和UI解耦
因为vue的启发,又不想引入vue,实现了一个simpleReactive.js
,用来解耦UI。比如:OpenBtn
类中,只需操作this.ret.show
的值,就可以显示或隐藏cavans元素。
反馈:您觉得本站怎么样?(此评价不会公开,也不会对博主产生任何实际利益。)
- 非常优秀
- 可以
- 一般
- 垃圾
- 超级恶心