博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信小程序开发:canvas 多行文字换行
阅读量:6114 次
发布时间:2019-06-21

本文共 2426 字,大约阅读时间需要 8 分钟。

微信小程序开发中,canvas画出一篇文章,由于句子长短不一,画起来确实是费劲,查了不少资料,总结一下:

html部分:

js部分:

function findBreakPoint(text, width, context) { var min = 0; var max = text.length - 1; while (min <= max) { var middle = Math.floor((min + max) / 2); var middleWidth = context.measureText(text.substr(0, middle)).width; var oneCharWiderThanMiddleWidth = context.measureText(text.substr(0, middle + 1)).width; if (middleWidth <= width && oneCharWiderThanMiddleWidth > width) { return middle;    } if (middleWidth < width) {      min = middle + 1;    } else {      max = middle - 1;    }  } return -1;}function breakLinesForCanvas(context, text, width, font) { var result = []; if (font) {    context.font = font;  } var textArray = text.split('\r\n'); for (let i = 0; i < textArray.length; i++) { let item = textArray[i]; var breakPoint = 0; while ((breakPoint = findBreakPoint(item, width, context)) !== -1) {      result.push(item.substr(0, breakPoint));      item = item.substr(breakPoint);    } if (item) {      result.push(item);    }  } return result;}Page({ /**   * 页面的初始数据   */  data: {    id: 0,    info: {}  }, /**   * 生命周期函数--监听页面加载   */  onLoad: function (options) { var that = this let info = { "0": "标题标题标题标题标题标题标题标题", "1": "内容内容内容内容内容内容内容内容内容内容内容", "2": "我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是",    };    that.drawInit(info);  },  canvasIdErrorCallback: function (e) {    console.error(e.detail.errMsg)  }, /**  * 生命周期函数--监听页面初次渲染完成  */  onReady: function (e) {}, /**   * 绘制图片   */  drawInit(info){ var that = this var res = wx.getSystemInfoSync() var canvasWidth = res.windowWidth // 获取canvas的的宽  自适应宽(设备宽/750) px var Rpx = (canvasWidth / 375).toFixed(2) //画布高度 -底部按钮高度 var canvasHeight = res.windowHeight - Rpx * 59 // 使用 wx.createContext 获取绘图上下文 context var context = wx.createCanvasContext('secondCanvas') //设置行高 var lineHeight = Rpx * 30 //左边距 var paddingLeft = Rpx * 20 //右边距 var paddingRight = Rpx * 20 //当前行高 var currentLineHeight = Rpx * 20 var result for (var i in info){      result = breakLinesForCanvas(context, info[i] || '无内容', canvasWidth - paddingLeft - paddingRight, `${(Rpx * 16).toFixed(0)}px PingFangSC-Regular`) //字体颜色      context.fillStyle = '#000000'      result.forEach(function (line, index) {        currentLineHeight += Rpx * 30        context.fillText(line, paddingLeft, currentLineHeight)  // currentLineHeight 表示文字在整个页面的位置:currentLineHeight + 300 表示整体下移 300px      });    }    context.draw()  }})

先这样吧。。。

转载地址:http://qbjka.baihongyu.com/

你可能感兴趣的文章
jQuery UI dialog 的使用
查看>>
ABP实战--集成Ladp/AD认证
查看>>
存储过程
查看>>
phpcms v9栏目列表调用每一篇文章内容方法
查看>>
python 自定义信号处理器
查看>>
我只是轻奢 40万内入门豪车最高让利7万!-搜狐汽车
查看>>
曲演杂坛--隐式转换
查看>>
远程桌面连接技巧--与主机拷贝文本及拷贝文件(转)
查看>>
MVC中下拉框显示枚举项
查看>>
Linux基础精华
查看>>
SqlServer2008第一次安装后连接问题
查看>>
cocos2d-x Schedule详解
查看>>
sdut 2163:Identifiers(第二届山东省省赛原题,水题)
查看>>
C++ 容器:顺序性容器、关联式容器和容器适配器
查看>>
mysql 常用语句集
查看>>
Atitit.软件开发提升稳定性总结
查看>>
lftp查看文件时间与登录服务查看文件时间相差8小时
查看>>
[leetcode]Next Permutation @ Python
查看>>
JAVA(2)——JDBC
查看>>
php heredoc 与 nowdoc
查看>>