1 Star 1 Fork 0

theajack / canvas-render-html

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

canvas-render-html

English

使用Canvas渲染HTML代码的项目,目前处于开发阶段 0.0.1-alpha

简易版本体验地址

目标与应用场景:

  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比对渲染

  1. style=xxx

由于需要对当前元素style重置,所以采用对当前元素进行重新cssom比对渲染

  1. style.xx = xx

只需要对当前元素的某个style进行覆盖 需要考虑important属性

重排

pixi绘制完成之后 元素的初始长宽都已经计算好了

使用renderManager 进行统一管理重绘和重排

收集样式改变、选择器改变 进行统一局部重绘 优化性能

收集可造成重排的改变进行 进行统一重排,最小化重排局部改变 优化性能

https://davidfig.github.io/pixi-scrollbox/

The MIT License (MIT) Copyright (c) 2022 - present Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

使用canvas绘制html代码 展开 收起
TypeScript 等 4 种语言
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
TypeScript
1
https://gitee.com/theajack/canvas-render-html.git
git@gitee.com:theajack/canvas-render-html.git
theajack
canvas-render-html
canvas-render-html
master

搜索帮助