详解微信小程序-canvas绘制文字实现自动换行


Posted in Javascript onApril 26, 2019

在使用微信小程序canvas绘制文字时,时常会遇到这样的问题:因为canvasContext.fillText参数为

详解微信小程序-canvas绘制文字实现自动换行

我们只能设置文本的最大宽度,这就产生一定的了问题。如果我们绘制的文本长度不确定或者我们希望文本超出自动换行或者用省略号表示,光靠这个API是无法完成的。下面本人就讲下我在开发中是如何解决这个问题的。

1 wxml代码

<canvas canvas-id="myCanvas" style="border: 1px solid;"/>

 2 wxss代码

canvas {
 width: 99%;
 height: 600rpx;
}

3 js代码

Page({
 data: {

 },
 onLoad: function (options) {
  const context = wx.createCanvasContext('myCanvas')
  var text = '这是一段文字用于文本自动换行文本长度自行设置欢迎大家指出缺陷';//这是要绘制的文本
  var chr =text.split("");//这个方法是将一个字符串分割成字符串数组
  var temp = "";
  var row = [];
  context.setFontSize(18)
  context.setFillStyle("#000")
  for (var a = 0; a < chr.length; a++) {
   if (context.measureText(temp).width < 250) {
    temp += chr[a];
   }
   else {
    a--; //这里添加了a-- 是为了防止字符丢失,效果图中有对比
    row.push(temp);
    temp = "";
   }
  }
  row.push(temp); 

  //如果数组长度大于2 则截取前两个
  if (row.length > 2) {
   var rowCut = row.slice(0, 2);
   var rowPart = rowCut[1];
   var test = "";
   var empty = [];
   for (var a = 0; a < rowPart.length; a++) {
    if (context.measureText(test).width < 220) {
     test += rowPart[a];
    }
    else {
     break;
    }
   }
   empty.push(test);
   var group = empty[0] + "..."//这里只显示两行,超出的用...表示
   rowCut.splice(1, 1, group);
   row = rowCut;
  }
  for (var b = 0; b < row.length; b++) {
   context.fillText(row[b], 10, 30 + b * 30, 300);
  }
  context.draw()  
 } 
})

4 效果展示

添加了a- -和没有a- -的对比

详解微信小程序-canvas绘制文字实现自动换行

以上就是换行的方法,如果想设置为不换行超出用省略号显示,也可参照上面的方法,将数组截取为一行再设置,道理是一样的。

以上所述是小编给大家介绍的微信小程序canvas绘制文字实现自动换行详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript入门教程(5) js Screen屏幕对象
Jan 31 Javascript
jquery动态添加option示例
Dec 30 Javascript
控制台报错object is not a function的解决方法
Aug 24 Javascript
javascript中DOM复选框选择用法实例
May 14 Javascript
JS实现弹性漂浮效果的广告代码
Sep 02 Javascript
js中遍历Map对象的简单实例
Aug 08 Javascript
酷! 不同风格页面布局幻灯片特效js实现
Feb 19 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
Nov 25 Javascript
vue单页应用的内存泄露定位和修复问题小结
Aug 02 Javascript
JavaScript实现Tab选项卡切换
Feb 13 Javascript
javascript 设计模式之享元模式原理与应用详解
Apr 08 Javascript
Postman内建变量常用方法实例解析
Jul 28 Javascript
vue 进阶之实现父子组件间的传值
Apr 26 #Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
Apr 26 #Javascript
配置一个vue3.0项目的完整步骤
Apr 26 #Javascript
关于Vue源码vm.$watch()内部原理详解
Apr 26 #Javascript
JS异步错误捕获的一些事小结
Apr 26 #Javascript
原生JS实现图片懒加载之页面性能优化
Apr 26 #Javascript
vue请求本地自己编写的json文件的方法
Apr 25 #Javascript
You might like
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
2010/03/27 Javascript
javascript 自动填写表单的实现方法
2010/04/09 Javascript
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
javascript基本类型详解
2014/11/28 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
详解Javascript数据类型的转换规则
2016/12/12 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
跨域请求两种方法 jsonp和cors的实现
2018/11/11 Javascript
浅谈js闭包理解
2019/04/01 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
python多任务之协程的使用详解
2019/08/26 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
使用Python实现画一个中国地图
2019/11/23 Python
Django之富文本(获取内容,设置内容方式)
2020/05/21 Python
python如何绘制疫情图
2020/09/16 Python
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
编写类String 的构造函数、析构函数和赋值函数
2012/09/09 面试题
what is the difference between ext2 and ext3
2013/11/03 面试题
城管大队整治方案
2014/05/06 职场文书
用人单位聘用意向书
2015/05/11 职场文书
如何写辞职信
2015/05/13 职场文书
合理化建议书范文
2015/09/14 职场文书
微信小程序实现轮播图指示器
2022/06/25 Javascript