美文网首页
微信小程序 canvas绘制文本换行

微信小程序 canvas绘制文本换行

作者: 小半_生 | 来源:发表于2018-08-15 15:18 被阅读1698次

    先上效果图

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

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

    1.wxml代码

    <canvas canvas-id = 'mycanvas'  class = 'mycanvas'></canvas>

    2.wxss代码

    width:70%;height:400px;background:#fff;position:fixed;top:70px;left:15%;z-index:10;border-radius:10px;

    3.js代码

    Page({ data: { },

    onLoad: function (options) {

    const context = wx.createCanvasContext('myCanvas')

    var text = '这是一段文字用于文本自动换行文本长度自行设置欢迎大家指出缺陷';//这是要绘制的文本';

    var chr =text.split("");//这个方法是将一个字符串分割成字符串数组 var temp = "";

    var row = [];

    context.setFontSize(18)

    context.setFillStyle("#000")

    for (var a = 0; a < chr.length; a++) {

    if (context.measureText(temp).width < 250) {

    temp += chr[a];

    } else {

    a--; //这里添加了a-- 是为了防止字符丢失,效果图中有对比

    row.push(temp); temp = "";

        }

    }

    row.push(temp); //如果数组长度大于2 则截取前两个

    if (row.length > 2) {

    var rowCut = row.slice(0, 2);

    var rowPart = rowCut[1];

    var test = "";

    var empty = [];

    for (var a = 0; a < rowPart.length; a++) {

    if (context.measureText(test).width < 220) {

    test += rowPart[a]; } else { break;

        }

    }

    empty.push(test);

    var group = empty[0] + "..."//

    这里只显示两行,超出的用...表示

    rowCut.splice(1, 1, group);

    row = rowCut; }

    for (var b = 0; b < row.length; b++) {

    context.fillText(row[b], 10, 30 + b * 30, 300);

            } context.draw()

        }

    })

    相关文章

      网友评论

          本文标题:微信小程序 canvas绘制文本换行

          本文链接:https://www.haomeiwen.com/subject/tolwbftx.html