import {Node, Canvas} from '../../components/index';
const systemInfo = wx.getSystemInfoSync();
const demo = `
author: alexayan
使用 HTML 构建易于理解的 UI 结构,使用 CSS 来描述 UI 样式和布局,一种优雅的 Canvas 绘图实现。
实现原理:
构建虚拟DOM 树,依据 CSS 规范计算样式,使用 CSS 盒模型对 DOM 进行布局,计算出所有元素的位置。最后将 DOM 树通过 Canvas Api 进行绘制。
兼容性:
HTML 样式和布局计算不依赖于特定 JavaScript 宿主环境,因此可以在 Node,游览器,小程序等环境上使用
待支持的 CSS 属性
flex
flex-basis
flex-direction
flex-flow
flex-grow
flex-shrink
flex-wrap
已支持的 CSS 属性
margin,margin-left,margin-top,margin-right,margin-bottom,padding,padding-left,padding-top,padding-right,padding-bottom,width,height,border,border-left,border-top,border-right,border-bottom,border-width,border-style,border-color,border-left-style,border-left-color,border-left-width,border-top-style,border-top-color,border-top-width,border-right-style,border-right-color,border-right-width,border-bottom-style,border-bottom-color,border-bottom-width,color,display,background-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-left-radius,border-bottom-right-radius,box-sizing,font,font-style,font-variant,font-weight,font-stretch,font-size,line-height,font-family,text-align,position,overflow,overflow-x,overflow-y,top,left,right,bottom,z-index
`;
Page({
data: {
canvasStyle: `width: ${systemInfo.screenWidth}px; height: ${systemInfo.screenHeight}px;`
},
onReady() {
const ctx = wx.createCanvasContext('canvas');
const canvas = new Canvas(ctx);
const tree = Node.fromHtml(demo);
tree.setStyle('width', `${systemInfo.screenWidth}px`)
// eslint-disable-next-line promise/catch-or-return
tree.layout(ctx).then(() => {
this.setData({
canvasStyle: `width: ${systemInfo.screenWidth}px; height: ${tree.boxHeight().value()}px;`
})
canvas.draw(tree);
ctx.draw(false, () => {
wx.canvasToTempFilePath({
x: 0,
y: 0,
width: tree.boxWidth().value(),
height: tree.boxHeight().value(),
canvasId: 'canvas',
success(res) {
console.log(res);
}
})
})
});
}
});