详解微信小程序-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 相关文章推荐
图片上传判断及预览脚本的效果实例
Aug 07 Javascript
jQuery动画效果animate和scrollTop结合使用实例
Apr 02 Javascript
Javascript中内建函数reduce的应用详解
Oct 20 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
Dec 08 Javascript
js 数字、字符串、布尔值的转换方法(必看)
Apr 07 Javascript
详解js静态资源文件请求的处理
Aug 01 Javascript
JavaScript 自定义事件之我见
Sep 25 Javascript
vue加载完成后的回调函数方法
Sep 07 Javascript
vue安装和使用scss及sass与scss的区别详解
Oct 15 Javascript
详解vantUI框架在vue项目中的应用踩坑
Dec 06 Javascript
微信小程序云开发之新手环境配置
May 16 Javascript
基于canvasJS在PHP中制作动态图表
May 30 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
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
php无序树实现方法
2015/07/28 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
如何使用jquery easyui创建标签组件
2015/11/18 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
Vue集成Iframe页面的方法示例
2017/12/12 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
Python实现定时任务
2017/02/08 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
python实现字典嵌套列表取值
2019/12/16 Python
美国创意之家:BulbHead
2017/07/12 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
深圳-东方伟业笔试部分
2015/02/11 面试题
建筑专业自荐信
2013/10/18 职场文书
财务会计实习报告体会
2013/12/20 职场文书
学校招生宣传广告词
2014/03/19 职场文书
保证书格式
2015/01/16 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
python实现自动化群控的步骤
2021/04/11 Python