详解微信小程序-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调试logger组件实现代码
Nov 20 Javascript
HTML上传控件取消选择
Mar 06 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
Aug 12 Javascript
jquery.qrcode在线生成二维码使用示例
Aug 21 Javascript
js实现弹窗插件功能实例代码分享
Dec 12 Javascript
Jquery 点击按钮自动高亮实现原理及代码
Apr 25 Javascript
JS实现单击输入框弹出选择框效果完整实例
Dec 14 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
Jun 12 Javascript
浅析jQuery操作select控件的取值和设值
Dec 07 Javascript
在Vue中如何使用Cookie操作实例
Jul 27 Javascript
JS非空验证及邮箱验证的实例
Aug 11 Javascript
vue实现路由不变的情况下,刷新页面操作示例
Feb 02 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实现获取FLV文件的时间
2015/02/10 PHP
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
理解JavaScript原型链
2016/10/25 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
微信小程序页面间值传递的两种方法
2018/11/26 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
2019/04/17 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python简单连接MongoDB数据库的方法
2016/03/15 Python
Python中shutil模块的学习笔记教程
2017/04/04 Python
Python3.X 线程中信号量的使用方法示例
2017/07/24 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
HTML5教程之html 5 本地数据库(Web Sql Database)
2014/04/03 HTML / CSS
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
linux面试题参考答案(3)
2012/09/13 面试题
11月红领巾广播稿
2014/01/17 职场文书
乡镇综治宣传月活动总结
2014/07/02 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python