详解微信小程序-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 相关文章推荐
Extjs中DisplayField的日期或者数字格式化扩展
Sep 03 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
Aug 18 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
Oct 28 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
Apr 20 Javascript
javascript实现可键盘控制的抽奖系统
Mar 10 Javascript
JavaScript中闭包的写法和作用详解
Jun 29 Javascript
实例解析jQuery中如何取消后续执行内容
Dec 01 Javascript
jquery广告无缝轮播实例
Jan 05 Javascript
原生js封装的ajax方法示例
Aug 02 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
Dec 05 Javascript
浅析vue中的provide / inject 有什么用处
Nov 10 Javascript
JavaScript中的宏任务和微任务详情
Nov 27 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实现图片缩放功能类
2013/12/18 PHP
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
PHPExcel笔记, mpdf导出
2016/05/03 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
Js 获取当前日期时间及其它操作实现代码
2021/03/04 Javascript
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
js innerHTML 改变div内容的方法
2013/08/03 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
以WordPress为例讲解jQuery美化页面Title的方法
2016/05/23 Javascript
使用JS读取XML文件的方法
2016/11/25 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
JavaScript位置参数实现原理及过程解析
2020/09/14 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
Python中functools模块函数解析
2017/03/12 Python
django缓存配置的几种方法详解
2018/07/16 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
Win系统PyQt5安装和使用教程
2019/12/25 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
.NET概念性的面试题
2012/02/29 面试题
法律专业自我鉴定
2013/10/03 职场文书
四风对照检查材料范文
2014/09/27 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python
MySQL中varchar和char类型的区别
2021/11/17 MySQL