# canvas-render-html **Repository Path**: theajack/canvas-render-html ## Basic Information - **Project Name**: canvas-render-html - **Description**: 使用canvas绘制html代码 - **Primary Language**: TypeScript - **License**: MIT - **Default Branch**: master - **Homepage**: https://theajack.gitee.io/canvas-render-html - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-02-25 - **Last Updated**: 2023-05-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # [canvas-render-html](https://www.github.com/theajack/canvas-render-html) [English](https://github.com/theajack/canvas-render-html) 使用Canvas渲染HTML代码的项目,目前处于开发阶段 0.0.1-alpha 简易版本[体验地址](https://theajack.gitee.io/canvas-render-html) 目标与应用场景: 1. 实现浏览器环境,实现跨端运行HTML与JS代码 2. 小程序、小游戏上运行html代码 3. 基于此实现在小程序上运行vue、react以及第三方UI 4. 支持小游戏及游戏引擎,实现绘制游戏UI 目前正在开发中,如果您有好的想法和建议,欢迎提 Issue 与 MR ## Done list 1. 虚拟DOM的构建 2. PIXI渲染 3. 解析属性 4. 解析部分样式 color,fontSize,width,height,display,left,top 5. 完成基础布局 6. querySelector 等api完成 7. 单元测试 ## Todo List 1. 更多样式的完善 2. css支持 done 3. 重绘制重排优化 done 4. 事件支持 5. style标签支持 6. script标签支持 7. z-index支持 8. flex布局 9. DOM 与 window api的完善 10. 盒模型 11. img、audio、video等标签的支持 12. resize改变布局 13. ... ## 原理 HTML -> vdom + css -> pixi渲染 ### 记录 #### layout 布局实现 计算elemnt的layout与boundary实现 inline + block relative布局 #### 执行顺序 对于元素 1. 解析标签开始 2. 创建元素 添加到parent 3. 渲染样式 4. 解析标签完成(子元素添加完成) 5. 由父元素layout自身 对于textNode 1. 创建 textNode 添加到父元素 2. 渲染样式 3. 由父元素layout自身 #### IDEA adapter实现类 pixi提供ui显示 背后有不同端各自adapter实现 1. input web:input; 小游戏 wx.showKeyboard 2. audio web: Audio; 小游戏 wx.createWebAudioContext 3. video web: video; 小游戏 wx.createVideo (将video至于顶层 调整位置) // wx.createVideoDecoder 方案2:解码逐帧绘制 重绘 => 重排 #### 重新渲染 难点: 1. 样式继承 2. css+选择器 3. important修饰符处理 分类 1. class id attr 修改: 需要对当前元素及其之下的所有元素进行重新cssom比对渲染 2. style=xxx 由于需要对当前元素style重置,所以采用对当前元素进行重新cssom比对渲染 3. style.xx = xx 只需要对当前元素的某个style进行覆盖 需要考虑important属性 #### 重排 pixi绘制完成之后 元素的初始长宽都已经计算好了 使用renderManager 进行统一管理重绘和重排 收集样式改变、选择器改变 进行统一局部重绘 优化性能 收集可造成重排的改变进行 进行统一重排,最小化重排局部改变 优化性能 https://davidfig.github.io/pixi-scrollbox/