创建画布

快应用的 canvas 功能由两部分组成,canvas 组件和渲染脚本。

canvas 组件中,用于绘制图形的部分,称之为 画布

canvas 组件

和其他组件一样,在快应用 template 中添加即可。同时可为其添加需要的样式。

这里需要注意,与 HTML 中 canvas 不同的是:

  • 暂不支持 width、height 属性,尺寸由 style 控制。
  • 默认尺寸为 0 x 0。
  • 底色默认为白色,background-color 无效。
  • 支持 margin 样式,但 padding、border 无效。
  • 不能有子节点。
  • 获取节点的方式需要采用快应用标准的 $element 方法。

渲染脚本

单独的 canvas 组件仅仅是一个透明矩形,我们需要通过渲染脚本来进一步操作。

首先通过 $element 和 id 来获取 canvas 组件节点,再通过 getContext 方法创建 canvas 绘图上下文。

getContext 方法的参数目前仅支持 '2d',创建的 canvas 绘图上下文是一个 CanvasRenderingContext2D 对象。

在后续脚本中操作该对象即可绘制图形。

完整示例代码如下:

  1. <template>
  2. <div class="doc-page">
  3. <div class="content">
  4. <canvas class="new-canvas" id="new-canvas"></canvas>
  5. </div>
  6. </div>
  7. </template>
  8. <style>
  9. .content {
  10. flex-direction: column;
  11. align-items: center;
  12. width: 100%;
  13. }
  14. .new-canvas {
  15. height: 380px;
  16. width: 380px;
  17. }
  18. </style>
  19. <script>
  20. export default {
  21. private: {
  22. drawComplete: false
  23. },
  24. onInit() {
  25. this.$page.setTitleBar({
  26. text: 'canvas简单绘制'
  27. })
  28. },
  29. onShow() {
  30. if (!this.drawComplete) {
  31. this.drawCanvas()
  32. }
  33. },
  34. drawCanvas() {
  35. const canvas = this.$element('new-canvas') //获取 canvas 组件
  36. const ctx = canvas.getContext('2d') //获取 canvas 绘图上下文
  37. //绘制一个矩形
  38. ctx.fillStyle = 'rgb(200,0,0)'
  39. ctx.fillRect(20, 20, 200, 200)
  40. //绘制另一个矩形
  41. ctx.fillStyle = 'rgba(0, 0, 200, 0.5)'
  42. ctx.fillRect(80, 80, 200, 200)
  43. this.drawComplete = true
  44. }
  45. }
  46. </script>

输出效果如图

基础示例