详解微信小程序-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 相关文章推荐
firefox下对ajax的onreadystatechange的支持情况分析
Dec 14 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
Jan 25 Javascript
html5的自定义data-*属性和jquery的data()方法的使用示例
Aug 21 Javascript
Js base64 加密解密介绍
Oct 11 Javascript
Javascript中this的用法详解
Sep 22 Javascript
JavaScript监听和禁用浏览器回车事件实例
Jan 31 Javascript
js实现圆盘记速表
Aug 03 Javascript
如何实现JavaScript动态加载CSS和JS文件
Dec 28 Javascript
js实现鼠标左右移动,图片也跟着移动效果
Jan 25 Javascript
JavaScript算法教程之sku(库存量单位)详解
Jun 29 Javascript
JavaScript中Object值合并方法详解
Dec 22 Javascript
JS实现排行榜文字向上滚动轮播效果
Nov 26 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 imagecreatetruecolor 创建高清和透明图片代码小结
2010/05/15 PHP
php max_execution_time执行时间问题
2011/07/17 PHP
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
Yii把CGridView文本框换成下拉框的方法
2014/12/03 PHP
php实现网站留言板功能
2015/11/04 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
AngularJS实现网站换肤实例
2021/02/19 Javascript
纯JS实现轮播图
2017/02/22 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
深入学习JavaScript中的bom
2019/05/27 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
[51:43]OG vs LGD 2018国际邀请赛淘汰赛BO3 第五场 8.26
2018/08/30 DOTA
[43:47]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第一场 12.09
2020/12/11 DOTA
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
python 简单的多线程链接实现代码
2016/08/28 Python
Python随机读取文件实现实例
2017/05/25 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
用python给自己做一款小说阅读器过程详解
2019/07/11 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
最新个人职业生涯规划书
2014/01/22 职场文书
《骆驼和羊》教学反思
2014/02/27 职场文书
公司募捐倡议书
2014/05/14 职场文书
植物生产学专业求职信
2014/08/08 职场文书
安全教育主题班会总结
2015/08/14 职场文书