canvas解决绘制文字自动换行问题

这篇博客探讨了在小程序的Canvas中使用ctx.fillText绘制文字时如何实现自动换行。作者通过计算画布宽度、字体大小和每行字数,确定所需行数,并用for循环实现文字的多行绘制。提供的代码示例展示了具体的实现方法,适用于小程序开发者解决类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在写小程序的canvas时,遇到一个蛮有趣的问题:使用canvas的ctx.fillText绘制文字时,即使超出画布了,也不会自动换行。

于是琢磨出了如下思路:

首先获取画布总宽度,然后获取每个字体的大小,这样就可以计算出每一行需要多少字。

然后根据每一行需要多少字,就可以计算出需要多少行。

接着canvas绘制的时候,就可以通过循环,实现自动换行绘制文字的功能。

解决方案代码如下:

  text(str) {
      // 画布总宽度 px单位
      let canvasWidth = wx.getSystemInfoSync().windowWidth * wx.getSystemInfoSync().pixelRatio * 0.9
      // 字体大小 px单位
      let fontSize = parseInt((wx.getSystemInfoSync().windowWidth/375) * 30)
      // 每行所需字数 = 画布总宽度 / 单个字体大小
      let rowFontNum = Math.floor(canvasWidth / fontSize)
      // 字符串总长度
      let strLength = str.length
      // 所需行数 = 字符总长度 / 每行所需字数
      let rows = Math.ceil(strLength / rowFontNum)
      return {canvasWidth,fontSize,rowFontNum,strLength,rows}
  },

然后在canvas的绘制中调用该函数,并使用for循环进行绘制。

        let result = this.text(data.summary)
        for (let i = 0; i <= result.rows; i++) {
          ctx.fillText(data.summary.slice(result.rowFontNum*(i-1),result.rowFontNum*i),20,630+i*70)
        }

效果截图:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知猪狭

恰饭恰饭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值