详解微信小程序-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实现的自定义的对话框的实现代码
Mar 21 Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
May 24 Javascript
jQuery制作简单柱状图实例
Jan 28 Javascript
深入分析jsonp协议原理
Sep 26 Javascript
thinkphp实现无限分类(使用递归)
Dec 19 Javascript
js简单实现调整网页字体大小的方法
Jul 23 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
Oct 10 Javascript
js制作可以延时消失的菜单
Jan 13 Javascript
基于vue 开发中出现警告问题去除方法
Jan 25 Javascript
Vue在页面数据渲染完成之后的调用方法
Sep 11 Javascript
解决JS表单验证只有第一个IF起作用的问题
Dec 04 Javascript
js中复选框的取值及赋值示例详解
Oct 18 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 文件上传模型,支持多文件上传
2009/08/13 PHP
php 仿Comsenz安装效果代码打包提供下载
2010/05/09 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
jQuery实现手机版页面翻页效果的简单实例
2016/10/05 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
Vue shopCart 组件开发详解
2018/01/26 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
Python中3种内建数据结构:列表、元组和字典
2014/11/30 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
python和php哪个更适合写爬虫
2020/06/22 Python
Html5实现iPhone开机界面示例代码
2013/06/30 HTML / CSS
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
迟到检讨书500字
2014/02/05 职场文书
公交公司毕业生求职信
2014/02/15 职场文书
中职生自荐信范文
2014/06/15 职场文书
2015年计划生育责任书
2015/05/08 职场文书
消防宣传标语大全
2015/08/03 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
Nginx+Tomcat实现负载均衡、动静分离的原理解析
2021/03/31 Servers
MySQL 查询速度慢的原因
2021/05/25 MySQL
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis
解决MySQL Varchar 类型尾部空格的问题
2022/04/06 MySQL
Android Gradle 插件自定义Plugin实现注意事项
2022/06/16 Java/Android