详解微信小程序-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实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色
May 27 Javascript
Google AJAX 搜索 API实现代码
Nov 17 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
May 28 Javascript
jQuery中toggleClass()方法用法实例
Jan 05 Javascript
js实现九宫格图片半透明渐显特效的方法
Feb 16 Javascript
jQuery中toggle()函数的使用实例
Apr 17 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
Sep 12 Javascript
vue修改对象的属性值后页面不重新渲染的实例
Aug 09 Javascript
javascript中一些奇葩的日期换算方法总结
Nov 14 Javascript
VUE搭建手机商城心得和遇到的坑
Feb 21 Javascript
JavaScript的级联函数用法简单示例【链式调用】
Mar 26 Javascript
Vue 中获取当前时间并实时刷新的实现代码
May 12 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树的代码,可以嵌套任意层
2006/10/09 PHP
数据库的日期格式转换
2006/10/09 PHP
php定时计划任务的实现方法详解
2013/06/06 PHP
深入HTTP响应状态码速查表的详解
2013/06/07 PHP
JavaScript 拾漏补遗
2009/12/27 Javascript
ext jquery 简单比较
2010/04/07 Javascript
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
elementUI select组件value值注意事项详解
2019/05/29 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
Node.js API详解之 module模块用法实例分析
2020/05/13 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
2020/11/17 Vue.js
在漏洞利用Python代码真的很爽
2007/08/26 Python
win10系统中安装scrapy-1.1
2016/07/03 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
利用Python如何批量更新服务器文件
2018/07/29 Python
pyttsx3实现中文文字转语音的方法
2018/12/24 Python
Python面向对象程序设计多继承和多态用法示例
2019/04/08 Python
从0开始的Python学习016异常
2019/04/08 Python
利用python实现AR教程
2019/11/20 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
python实现门限回归方式
2020/02/29 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
HTML5 常用语法一览(列举不支持的属性)
2010/01/26 HTML / CSS
咖啡书吧创业计划书
2014/01/13 职场文书
加多宝凉茶广告词
2014/03/18 职场文书
2015年教师新年寄语
2014/12/08 职场文书
教师继续教育反思周记
2015/06/25 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
PyTorch的Debug指南
2021/05/07 Python