微信小程序开发:canvas 多行文字换行

简介: 微信小程序开发:canvas 多行文字换行

微信小程序开发中,canvas画出一篇文章,由于句子长短不一,画起来确实是费劲,查了不少资料,总结一下:

html部分:


<canvas id='secondCanvas' canvas-id='secondCanvas' style='width:{{414}}px;height:{{750}}px;'></canvas>


js部分:


function findBreakPoint(text, width, context) {

 var min = 0;

 var max = text.length - 1;

 while (min <= max) {

 var middle = Math.floor((min + max) / 2);

 var middleWidth = context.measureText(text.substr(0, middle)).width;

 var oneCharWiderThanMiddleWidth = context.measureText(text.substr(0, middle + 1)).width;

 if (middleWidth <= width && oneCharWiderThanMiddleWidth > width) {

 return middle;

    }

 if (middleWidth < width) {

      min = middle + 1;

    } else {

      max = middle - 1;

    }

  }

 return -1;

}

function breakLinesForCanvas(context, text, width, font) {

 var result = [];

 if (font) {

    context.font = font;

  }

 var textArray = text.split('\r\n');

 for (let i = 0; i < textArray.length; i++) {

 let item = textArray[i];

 var breakPoint = 0;

 while ((breakPoint = findBreakPoint(item, width, context)) !== -1) {

      result.push(item.substr(0, breakPoint));

      item = item.substr(breakPoint);

    }

 if (item) {

      result.push(item);

    }

  }

 return result;

}

Page({

 /**

   * 页面的初始数据

   */

  data: {

    id: 0,

    info: {}

  },

 /**

   * 生命周期函数--监听页面加载

   */

  onLoad: function (options) {

 var that = this

 let info = {

 "0": "标题标题标题标题标题标题标题标题",

 "1": "内容内容内容内容内容内容内容内容内容内容内容",

 "2": "我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是",

    };

    that.drawInit(info);

  },

  canvasIdErrorCallback: function (e) {

    console.error(e.detail.errMsg)

  },

 /**

  * 生命周期函数--监听页面初次渲染完成

  */

  onReady: function (e) {},

 /**

   * 绘制图片

   */

  drawInit(info){

 var that = this

 var res = wx.getSystemInfoSync()

 var canvasWidth = res.windowWidth

 // 获取canvas的的宽  自适应宽(设备宽/750) px

 var Rpx = (canvasWidth / 375).toFixed(2)

 //画布高度 -底部按钮高度

 var canvasHeight = res.windowHeight - Rpx * 59

 // 使用 wx.createContext 获取绘图上下文 context

 var context = wx.createCanvasContext('secondCanvas')

 //设置行高

 var lineHeight = Rpx * 30

 //左边距

 var paddingLeft = Rpx * 20

 //右边距

 var paddingRight = Rpx * 20

 //当前行高

 var currentLineHeight = Rpx * 20

 var result

 for (var i in info){

      result = breakLinesForCanvas(context, info[i] || '无内容', canvasWidth - paddingLeft - paddingRight, `${(Rpx * 16).toFixed(0)}px PingFangSC-Regular`)

 //字体颜色

      context.fillStyle = '#000000'

      result.forEach(function (line, index) {

        currentLineHeight += Rpx * 30

        context.fillText(line, paddingLeft, currentLineHeight)  // currentLineHeight 表示文字在整个页面的位置:currentLineHeight + 300 表示整体下移 300px

      });

    }

    context.draw()

  }

})


先这样吧。。。

目录
相关文章
|
2月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
710 7
|
2月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
757 1
|
2月前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
256 1
|
2月前
|
小程序 前端开发 数据安全/隐私保护
微信小程序全栈开发中的身份认证与授权机制
【10月更文挑战第3天】随着移动互联网的发展,微信小程序凭借便捷的用户体验和强大的社交传播能力,成为企业拓展业务的新渠道。本文探讨了小程序全栈开发中的身份认证与授权机制,包括手机号码验证、微信登录、第三方登录及角色权限控制等方法,并强调了安全性、用户体验和合规性的重要性,帮助开发者更好地理解和应用这一关键技术。
90 5
|
2月前
|
小程序 前端开发 JavaScript
微信小程序全栈开发中的PWA技术应用
【10月更文挑战第3天】微信小程序作为新兴应用形态,凭借便捷体验与社交传播能力,成为企业拓展业务的新渠道。本文探讨了微信小程序全栈开发中的PWA技术应用,包括离线访问、后台运行、桌面图标及原生体验等方面,助力开发者提升小程序性能与用户体验。PWA技术在不同平台的兼容性、性能优化及用户体验是实践中需注意的关键点。
73 5
|
2月前
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
1072 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
2月前
|
前端开发 小程序 JavaScript
小程序 canvas 生成海报 一次搞掂
小程序 canvas 生成海报 一次搞掂
34 1
|
2月前
|
存储 小程序 安全
微信的开发管理都需要配置什么?
【10月更文挑战第17天】微信的开发管理都需要配置什么?
37 0
|
2月前
|
JavaScript 小程序 开发者
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
485 0
|
2月前
|
小程序
uni-app开发微信小程序使用onPullDownRefresh(下拉刷新)总结
uni-app开发微信小程序使用onPullDownRefresh(下拉刷新)总结
674 0