canvas文字换行


```javascript
creatTeacherText() {
      var c = document.getElementById('teacher-canvas')
      var cxt = c.getContext('2d')
      cxt.font = 'normal  32px PingFangSC-Regular, PingFang SC'

      // 创建渐变
      var gradient = cxt.createLinearGradient(0, 0, c.width, 0)
      gradient.addColorStop('0', '#fff')
      // 填充渐变
      cxt.fillStyle = gradient
      const str = this.collegeTeacher

      this.toFormateStr(cxt, str, 656, 2, 0, 32, 54, 108)
    },
    // 换行
    toFormateStr(ctx, str, draw_width, lineNum, startX, startY, steps, draw_height) {
      var strWidth = ctx.measureText(str).width // 测量文本源尺寸信息(宽度)
      var startpoint = startY
      var keyStr = ''
      var sreLN = strWidth / draw_width
      var liner = Math.ceil(sreLN) // 计算文本源一共能生成多少行
      const strlen = parseInt(str.length / sreLN) // 等比缩放测量一行文本显示多少个字符

      // 若文本不足一行,则直接绘制,反之大于传入的最多行数(lineNum)以省略号(...)代替
      if (strWidth < draw_width) {
        ctx.fillText(str, startX, startpoint)
      } else {
        for (var i = 1; i < liner + 1; i++) {
          const startPoint = strlen * (i - 1)
          if (i < lineNum || lineNum == -1) {
            keyStr = str.substr(startPoint, strlen)
            ctx.fillText(keyStr, startX, startpoint)
          } else {
            if (str.substr(startPoint, strlen).length >= strlen) {
              keyStr = str.substr(startPoint, strlen - 2) + '...'
            } else {
              keyStr = str.substr(startPoint, strlen)
            }
            ctx.fillText(keyStr, startX, startpoint)
            break
          }
          startpoint = startpoint + steps
        }
      }
      setTimeout(() => {
        ctx.clearRect(0, 0, draw_width, draw_height) // 删除之前创建的文字
      }, 500)
    },

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值