|
| 1 | +背景:由于小程序没有直接分享到朋友圈的接口,但一些日常操作又需要用到分享到朋友圈等。于是, |
| 2 | +只能采取“曲线救国”的路线,生成一张精美的卡片等,让用户分享朋友圈。 |
| 3 | + |
| 4 | +## 1.关于canvas的一些坑 |
| 5 | + |
| 6 | ++ 1.canvas组件在hidden情况下依然可以执行绘制操作,并且不占据空间。 |
| 7 | ++ 2.canvas组件在hidden情况下需要指定width和height,在hidden情况下,无法对canvas的width和height进行动态调整 |
| 8 | ++ 3.要想动态调整canvas的width和height,需要使用wx:if="{{}}"来配合。 |
| 9 | +注:也就是使用控制条件,平时不显示,在需要绘制的时候才显示进行绘制图片(可以放到页面底部) |
| 10 | + |
| 11 | +## 2.canvas的封装 |
| 12 | + |
| 13 | +canvas绘制分享图片的操作可能在一个项目中要用上好几次,或者很多项目都需要用到。这时候我们就可以把它封装 |
| 14 | +起来,到用的时候直接调用。也省的每次都编写重复的代码,还可能出错。 |
| 15 | + |
| 16 | +### 2.1 制定目标 |
| 17 | + |
| 18 | +我们对canvas相关操作进行封装,其实是为了生成精美的分享图片(其中可能涉及到文字和图片的绘制)。 |
| 19 | +所以,目标我们有了。基于这个目标,我们大概需要如下属性。 |
| 20 | + |
| 21 | +### 2.2 敲定参数 |
| 22 | + |
| 23 | +- 1.canvasId // string类型 |
| 24 | +- 2.offsetx // number类型。也就是wx.canvasToTempFile()中的x,这个x不一定是0,所以我们设为这个参数名。 |
| 25 | +- 3.offsety // number类型。同上 |
| 26 | +- 4.width // number类型。wx.canvasToTempFile()中的width |
| 27 | +- 5.height // number类型。wx.canvasToTempFile()中的height |
| 28 | +- 6.destWidth // number类型。wx.canvasToTempFile()中的destWidth |
| 29 | +- 7.destHeight //number类型。wx.canvasToTempFile()中的destHeight |
| 30 | + |
| 31 | +因为要绘制图片或者文字。所以,除此之外,我们还需要,imgList和wordsList |
| 32 | + |
| 33 | +- 8.imgList // array类型 |
| 34 | +- 9.wordsList // array类型 |
| 35 | + |
| 36 | +imgList中,每个数据都应是1个需绘制图片的所有信息,所以它应该是json数据格式的,即{},wordsList同理 |
| 37 | +那么imgList就需要如下数据且都是必须传入的(如果传入图片的话) |
| 38 | + |
| 39 | +- 8.imgList // array类型 |
| 40 | + + 1.source // 图片地址 |
| 41 | + + 2.x // 绘制的起点位置的x轴 |
| 42 | + + 3.y // 绘制的起点位置的y轴 |
| 43 | + + 4.width // 绘制的width |
| 44 | + + 5.height // 绘制的height |
| 45 | + |
| 46 | +同理,wordsList就需要如下数据, |
| 47 | +- 9.wordsList // array类型 |
| 48 | + + 1.word // 即需要绘制的问题 |
| 49 | + + 2.x // 绘制的位置点x |
| 50 | + + 3.y // 绘制的位置点y |
| 51 | + + 同时可能还需要设置其他信息,如下(非必须) |
| 52 | + + 4.font // 要绘制的文字大小size,用于setFontSize() |
| 53 | + + 5.textAlign // 文字的水平对齐方式,仅为 'left' 'center' 'right' |
| 54 | + + 6.textBaseLine // 文字的纵向对齐方式,仅为 'top' 'bottom' 'middle' 'normal' |
| 55 | + + 7.textColor // 文字的颜色 |
| 56 | + |
| 57 | +由于wordsList中存在非必须传入的一些属性,当不传入时,那么就可能会出现一些问题。于是设定一些 |
| 58 | +可以复用的参数,接着前面的wordsList下来 |
| 59 | + |
| 60 | +- 9.wordsList // array 类型 |
| 61 | +- 10.font // 全局的font,不传入时,默认为35 |
| 62 | +- 11.textAlign // 全局的textAlign ,不传入时,默认为center |
| 63 | +- 12.textBaseLine // 全局的textBaseLin,不传入时,默认为middle |
| 64 | +- 13.textColor // 全局的textColor,不传入时,默认为 black |
| 65 | + |
| 66 | +至此,所需要的参数,基本敲定。但我们不可能在调用方法的时候传入几十个参数。所以,我们就把这些参数, |
| 67 | +用{}包起来(也就是接收一个{}格式的参数),调用的时候把所有数据用{}包起来传进来即可。 |
0 commit comments