在小程序常常会用到海报,这就需要canvas的一些常用方法,修饰文字,画图片圆角的封装方法,把它抽成canvas.js文件,方便以后用

  在canvas.js   (笔记---canvas)

    

 1 /**
 2  * 文本换行
 3  * @param {Object} obj
 4  */
 5 export const textWrap = function(obj){
 6   let tr = getTextLine(obj);
 7   for (let i = 0; i < tr.length; i++) {
 8     if (i < obj.line){
 9       let txt = {
10         context: obj.context,
11         x: obj.x,
12         y: obj.y + (i * obj.height),
13         color: obj.color,
14         size: obj.size,
15         align: obj.align,
16         baseline: obj.baseline,
17         text: tr[i],
18         bold: obj.bold
19       };
20       if (i == obj.line - 1) {
21         if (tr.length > obj.line) {
22           txt.text = txt.text.substring(0, txt.text.length - 1) + '...';
23         }
24       }
25       drawText(txt);
26     }
27   }
28 }
29 /**
30  * 渲染文字
31  *
32  * @param {Object} obj
33  */
34 var drawText = function (obj) {
35   obj.context.save();
36   obj.context.setFillStyle(obj.color);
37   obj.context.setFontSize(obj.size);
38   obj.context.setTextAlign(obj.align);
39   obj.context.setTextBaseline(obj.baseline);
40   if (obj.bold) {
41     obj.context.fillText(obj.text, obj.x, obj.y - 0.5);
42     obj.context.fillText(obj.text, obj.x - 0.5, obj.y);
43   }
44   obj.context.fillText(obj.text, obj.x, obj.y);
45   if (obj.bold) {
46     obj.context.fillText(obj.text, obj.x, obj.y + 0.5);
47     obj.context.fillText(obj.text, obj.x + 0.5, obj.y);
48   }
49   obj.context.restore();
50 }
51 /**
52  * 获取文本折行
53  * @param {Object} obj
54  * @return {Array} arrTr
55  */
56 var getTextLine = function(obj){
57   obj.context.setFontSize(obj.size);
58   let arrText = obj.text.split('');
59   console.log(arrText);
60   let line = '';
61   let arrTr = [];
62   for (let i = 0; i < arrText.length; i++) {
63     var testLine = line + arrText[i];
64     var metrics = obj.context.measureText(testLine);
65     var width = metrics.width;
66     if ((width > obj.width && i > 0)||arrText[i]=='\n') {  //
67       arrTr.push(line);
68       line = arrText[i]=='\n'?arrText[i+1]:arrText[i];
69     } else {
70       line = testLine;
71     }
72     if (i == arrText.length - 1) {
73       arrTr.push(line);
74     }
75   }
76   return arrTr;
77 }
78 
79 /**
80  * 圆形头像
81  */
82 export const circleImg = function(context, img, x, y, r){
83   context.save();
84   var d = 2 * r;
85   var cx = x + r;
86   var cy = y + r;
87   context.beginPath();
88   context.arc(cx, cy, r, 0, 2 * Math.PI);
89   context.clip();
90   context.drawImage(img, x, y, d, d);
91   context.restore()
92 }

 

posted @ 2019-11-08 16:35  PinkYun  阅读(209)  评论(0编辑  收藏  举报