微信小程序开发: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()

  }

})


先这样吧。。。

目录
相关文章
|
1月前
|
人工智能 小程序
【一步步开发AI运动小程序】十五、AI运动识别中,如何判断人体站位的远近?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,无需后台支持,具有快速、体验好、易集成等特点。本文介绍如何利用插件判断人体与摄像头的远近,确保人体图像在帧内的比例适中,以优化识别效果。通过`whole`检测规则,分别实现人体过近和过远的判断,并给出相应示例代码。
|
1天前
|
JSON 小程序 数据格式
微信小程序默认的文字内容在左上角怎么办?带你0基础快速了解skyline渲染模式。
本文主要介绍微信小程序开发中遇到的问题及其解决方法。问题通常由微信小程序自带的Skyline渲染模式引起,而非代码编写错误。解决步骤包括:1. 找到全局配置文件app.json;2. 去掉相关配置项;3. 修改后的配置示例。通过这些步骤可以有效解决文字内容顶格或覆盖的问题。文中还提供了进一步了解Skyline渲染模式的链接,帮助开发者深入理解其原理和应用。
12 1
|
21天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
165 18
|
1天前
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
5 0
|
3天前
|
小程序 IDE PHP
圈子源码如何打包生成App小程序/开发一个圈子系统软件所需要的费用体现在哪里?
将PHP源码打包成App的过程涉及多个步骤和技术选择。以圈子源码为例,首先明确需求,确定App功能和目标用户群体,并根据需求开发小程序页面,如用户注册、圈子列表等。源码准备阶段确保源码适用于小程序开发,环境配置需安装IDE(如微信开发者工具)及依赖库。最后在IDE中打包小程序并上传至管理平台,通过审核后发布。费用方面,模板开发成本较低,定制开发则更高,具体取决于需求复杂度和第三方服务费用。
25 0
|
1月前
|
人工智能 小程序 UED
【一步步开发AI运动小程序】十六、AI运动识别中,如何判断人体站位?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,本地引擎无需后台支持,具备快速、体验好、易集成等优势。本文介绍如何利用插件的`camera-view`功能,通过检测人体站位视角(前、后、左、右),确保运动时的最佳识别率和用户体验。代码示例展示了如何实现视角检查,确保用户正或背对摄像头,为后续运动检测打下基础。
|
1月前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十七、如何识别用户上传视频中的人体、运动、动作、姿态?
【云智AI运动识别小程序插件】提供人体、运动、姿态检测的AI能力,支持本地原生识别,无需后台服务,具有速度快、体验好、易集成等优点。本文介绍如何使用该插件实现用户上传视频的运动识别,包括视频解码抽帧和人体识别的实现方法。
|
2月前
|
人工智能 小程序 IDE
【一步步开发AI运动小程序】九、姿态辅助调试桌面工具的使用
随着AI技术的发展,各大厂商推出的AI运动APP如“乐动力”、“天天跳绳”等,使云上运动会、线上健身等概念大热。本文将指导你如何利用“云智AI运动识别小程序插件”,在微信小程序中实现类似功能,包括工具搭建、服务启动及数据回传等步骤,助力开发者高效开发AI运动小程序。
【一步步开发AI运动小程序】九、姿态辅助调试桌面工具的使用
|
1月前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数02
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,详细解析了俯卧撑动作的检测规则构建与执行流程,涵盖卧撑和撑卧两个姿态的识别规则,以及如何通过继承`sports.SportBase`类实现运动分析器,适用于小程序开发者。
|
1月前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01
随着AI技术的发展,AI运动APP如雨后春笋般涌现,如“乐动力”、“天天跳绳”等,推动了云上运动会、线上健身等热潮。本文将指导你从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”,介绍运动识别原理、计量方式及运动分析器基类的使用,帮助你在小程序中实现运动计时和计数功能。下篇将继续探讨运动姿态检测规则的编写。

热门文章

最新文章