详解微信小程序-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 相关文章推荐
js的闭包的一个示例说明
Nov 18 Javascript
VBS通过WMI监视注册表变动的代码
Oct 27 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
Jan 23 Javascript
Angularjs 滚动加载更多数据
Mar 17 Javascript
jquery实现焦点轮播效果
Feb 23 Javascript
AngularJS页面传参的5种方式
Apr 01 Javascript
clipboard.js在移动端复制失败的解决方法
Jun 13 Javascript
如何使用webpack打包一个库library的方法步骤
Dec 18 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
Jan 06 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
Feb 19 Javascript
vue内置组件component--通过is属性动态渲染组件操作
Jul 28 Javascript
JavaScript中关于预编译、作用域链和闭包的理解
Mar 31 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
使用无限生命期Session的方法
2006/10/09 PHP
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
生成静态页面的PHP类
2006/11/25 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
PHP _construct()函数讲解
2019/02/03 PHP
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
2015/02/23 Javascript
JS+CSS实现表格高亮的方法
2015/08/05 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
在localStorage中存储对象数组并读取的方法
2016/09/24 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
JavaScript 五大常见函数
2018/03/23 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
Django使用Celery异步任务队列的使用
2018/03/13 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
Pyqt助手安装PyQt5帮助文档过程图解
2020/11/20 Python
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
mysql部分操作
2021/04/05 MySQL
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang