详解微信小程序-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 相关文章推荐
JavaScript 嵌套函数指向this对象错误的解决方法
Mar 15 Javascript
JS记录用户登录次数实现代码
Jan 15 Javascript
用unescape反编码得出汉字示例
Apr 24 Javascript
jQuery中focus事件用法实例
Dec 26 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
Dec 29 Javascript
JS获取input file绝对路径的方法(推荐)
Aug 02 Javascript
canvas简单快速的实现知乎登录页背景效果
May 08 Javascript
vue使用axios跨域请求数据问题详解
Oct 18 Javascript
使用express搭建一个简单的查询服务器的方法
Feb 09 Javascript
详解Vue源码学习之callHook钩子函数
Jul 25 Javascript
element-ui upload组件多文件上传的示例代码
Oct 17 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
Jun 06 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
英雄试炼之肉山谷—引领RPG新潮流
2020/04/20 DOTA
德劲1103二次变频版的打磨
2021/03/02 无线电
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
鸡肋的PHP单例模式应用详解
2013/06/03 PHP
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
javascipt:filter过滤介绍及使用
2014/09/10 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
2016/02/26 Javascript
详解Angularjs中的依赖注入
2016/03/11 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
vue实现在表格里,取每行的id的方法
2018/03/09 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
Vue.js实现立体计算器
2020/02/22 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
Python中使用item()方法遍历字典的例子
2014/08/26 Python
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
工程现场管理求职自荐信
2013/10/02 职场文书
应届生的求职推荐信范文
2013/11/30 职场文书
美容院店长岗位职责
2014/04/08 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
水知道答案观后感
2015/06/08 职场文书
创业计划书之宠物店
2019/09/19 职场文书