美文网首页
小程序 canvas绘制多行文字多余的省略号表示

小程序 canvas绘制多行文字多余的省略号表示

作者: 小雨hahaha | 来源:发表于2019-03-05 15:45 被阅读2次

    下面这个方法是返回有几行:

    /**
     * canvas绘图相关,把文字转化成只能行数,多余显示省略号
     * ctx: 当前的canvas
     * text: 文本
     * contentWidth: 文本最大宽度
     * lineNumber: 显示几行
     */
    function transformContentToMultiLineText(ctx, text, contentWidth, lineNumber) {
      var textArray = text.split(""); // 分割成字符串数组
      var temp = "";
      var row = [];
    
      for (var i = 0; i < textArray.length; i++) {
        if (ctx.measureText(temp).width < contentWidth) {
          temp += textArray[i];
        } else {
          i--; // 这里添加i--是为了防止字符丢失
          row.push(temp);
          temp = "";
        }
      }
      row.push(temp);
    
      // 如果数组长度大于2,则截取前两个
      if (row.length > lineNumber) {
        var rowCut = row.slice(0, lineNumber);
        var rowPart = rowCut[1];
        var test = "";
        var empty = [];
        for (var a = 0; a < rowPart.length; a++) {
          if (ctx.measureText(test).width < contentWidth) {
            test += rowPart[a];
          } else {
            break;
          }
        }
        empty.push(test); // 处理后面加省略号
        var group = empty[0] + '...'
        rowCut.splice(lineNumber - 1, 1, group);
        row = rowCut;
      }
      return row;
    }
    

    返回了有几行以后,需要逐行绘制

    var row = util.transformContentToMultiLineText(ctx, text, contentWidth, 4);
    var contentTextY = 0; // 这段文字起始的y位置
    var leftSpace = 0; // 这段文字起始的X位置
    var textLineHeight = 20; // 一行文字加一行行间距
    for (var b = 0; b < row.length; b++) {
          ctx.fillText(row[b], leftSpace, contentTextY + lineHeight * b, contentWidth);   // 内容y=155
        }

    相关文章

      网友评论

          本文标题:小程序 canvas绘制多行文字多余的省略号表示

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