频道栏目
首页 > 资讯 > 微信小程序 > 正文

canvas绘制文字实现自动换行案例

18-09-30        来源:[db:作者]  
收藏   我要投稿

在使用微信小程序canvas绘制文字时,时常会遇到这样的问题:因为canvasContext.fillText参数为

我们只能设置文本的最大宽度,这就产生一定的了问题。如果我们绘制的文本长度不确定或者我们希望文本超出自动换行或者用省略号表示,光靠这个API是无法完成的。下面本人就讲下我在开发中是如何解决这个问题的。

2 wxss代码

  1. canvas {
  2. width: 99%;
  3. height: 600rpx;
  4. }1234

3 js代码


Page({
  1. data: {
  2.  
  3. },
  4. onLoad: function (options) {
  5. const context = wx.createCanvasContext('myCanvas')
  6. var text = '这是一段文字用于文本自动换行文本长度自行设置欢迎大家指出缺陷';//这是要绘制的文本
  7. var chr =text.split("");//这个方法是将一个字符串分割成字符串数组
  8. var temp = "";
  9. var row = [];
  10. context.setFontSize(18)
  11. context.setFillStyle("#000")
  12. for (var a = 0; a < chr.length; a++) {
  13. if (context.measureText(temp).width < 250) {
  14. temp += chr[a];
  15. }
  16. else {
  17. a--; //这里添加了a-- 是为了防止字符丢失,效果图中有对比
  18. row.push(temp);
  19. temp = "";
  20. }
  21. }
  22. row.push(temp);
  23.  
  24. //如果数组长度大于2 则截取前两个
  25. if (row.length > 2) {
  26. var rowCut = row.slice(0, 2);
  27. var rowPart = rowCut[1];
  28. var test = "";
  29. var empty = [];
  30. for (var a = 0; a < rowPart.length; a++) {
  31. if (context.measureText(test).width < 220) {
  32. test += rowPart[a];
  33. }
  34. else {
  35. break;
  36. }
  37. }
  38. empty.push(test);
  39. var group = empty[0] + "..."//这里只显示两行,超出的用...表示
  40. rowCut.splice(1, 1, group);
  41. row = rowCut;
  42. }
  43. for (var b = 0; b < row.length; b++) {
  44. context.fillText(row[b], 10, 30 + b * 30, 300);
  45. }
  46. context.draw()
  47. }
  48. })12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849

4 效果展示

添加了a- -和没有a- -的对比

以上就是换行的方法,如果想设置为不换行超出用省略号显示,也可参照上面的方法,将数组截取为一行再设置,道理是一样的。

相关TAG标签
上一篇:《工作细胞》人设将无偿供科教行业使用
下一篇:利用云开发优化博客小程序之浏览量统计
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站