南烟i 2018-06-26 03:59 采纳率: 13.3%
浏览 2584
已结题

html5 canvas 画一个矩形,文字超出矩形怎样自动换行?

DrawingManager.prototype.showLayerTitle = function (layer, isSelected) {
let x, y;
if (layer.p1) {

    x = layer.p1.x1 + layer.x + 5, y = layer.p1.y1 + layer.y + 5;
} else {
    x = layer.x + 5, y = layer.y + 5;
}

this.$canvas.drawText({
    name: layer.name + "_title",
    layer: true,
    cursors: {
        mouseover: 'hand'
    },
    fromCenter: false,
    fillStyle: '#9cf',
    strokeStyle: isSelected ? '#03e2dc' : '#d3e2dc',
    strokeWidth: 1,   //笔划宽度
    shadowColor: 'black',  //阴影颜色
    shadowBlur: 2,   //阴影模糊
    shadowOffsetX: 2,
    shadowOffsetY: 2,
    groups: ['grpTitle'],
    x: x, y: y,
    fontSize: isSelected ? 16 : 14,
    // fontFamily: 'Verdana, sans-serif',
    text: layer.data.title === '' ? '...':layer.data.title,
    click: () => {
        if(this.canvasDrawingModel === 0){
            saveCategory(layer.data.title, layer.name);
        }
    }
})

};
如何让text换行

  • 写回答

2条回答

  • threenewbee 2018-06-26 04:29
    关注
     var c=document.getElementById("canvas"); 
    var ctx=c.getContext("2d"); 
    ctx.fillStyle="#E992B9";
    ctx.lineWidth=1; 
    var str = "假如生活欺骗了你,请不要悲伤!thank you!"
    var lineWidth = 0;
    var canvasWidth = c.width;//计算canvas的宽度
    var initHeight=15;//绘制字体距离canvas顶部初始的高度
    var lastSubStrIndex= 0; //每次开始截取的字符串的索引
    for(let i=0;i<str.length;i++){ 
        lineWidth+=ctx.measureText(str[i]).width; 
        if(lineWidth>canvasWidth){  
            ctx.fillText(str.substring(lastSubStrIndex,i),0,initHeight);//绘制截取部分
            initHeight+=20;//20为字体的高度
            lineWidth=0;
            lastSubStrIndex=i;
        } 
        if(i==str.length-1){//绘制剩余部分
            ctx.fillText(str.substring(lastSubStrIndex,i+1),0,initHeight);
        }
    }
    

    https://blog.csdn.net/lishihong108/article/details/52483867?ref=myread

    评论

报告相同问题?

悬赏问题

  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集