在小程序Canvas中使用measureText的方法示例


Posted in Javascript onOctober 19, 2018

有时候我们在使用Canvas绘制一段文本时,会需要通过measureText()方法获取文本的宽度,例如:

创建canvas标签

<canvas id="canvas"></canvas>

获取一段文本的宽度

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');

var text = ctx.measureText('foo'); // TextMetrics object
text.width; // 16;

如上所示,measureText返回的其实是一个TextMetrics对象,它包含了文本的宽度,MDN上的解释如下:

The CanvasRenderingContext2D.measureText() method returns a TextMetrics object that contains information about the measured text (such as its width for example).

在微信小程序现在的版本(v2.13.7)中,小程序的canvas还不支持measureText,所以我自己写了个类似于measureText方法,通过canvas获取文本的宽度,方法如下:

function measureText (text, fontSize=10) {
  text = String(text);
  var text = text.split('');
  var width = 0;
  text.forEach(function(item) {
    if (/[a-zA-Z]/.test(item)) {
      width += 7;
    } else if (/[0-9]/.test(item)) {
      width += 5.5;
    } else if (/\./.test(item)) {
      width += 2.7;
    } else if (/-/.test(item)) {
      width += 3.25;
    } else if (/[\u4e00-\u9fa5]/.test(item)) { //中文匹配
      width += 10;
    } else if (/\(|\)/.test(item)) {
      width += 3.73;
    } else if (/\s/.test(item)) {
      width += 2.5;
    } else if (/%/.test(item)) {
      width += 8;
    } else {
      width += 10;
    }
  });
  return width * fontSize / 10;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
phpwind放自动注册方法
Dec 02 Javascript
jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
Apr 27 Javascript
jQuery的load()方法及其回调函数用法实例
Mar 25 Javascript
javascript自定义右键弹出菜单实现方法
May 25 Javascript
js 中rewrap-ajax.js插件实例代码
Oct 20 Javascript
JS写XSS cookie stealer来窃取密码的步骤详解
Nov 20 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
Mar 16 Javascript
Vue仿支付宝支付功能
May 25 Javascript
layui框架table 数据表格的方法级渲染详解
Aug 19 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
Sep 30 Javascript
JavaScript实现打砖块游戏
Feb 25 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
May 10 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
Oct 19 #Javascript
clipboard在vue中的使用的方法示例
Oct 19 #Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
Oct 19 #Javascript
ES6 系列之 Generator 的自动执行的方法示例
Oct 19 #Javascript
js中自定义react数据验证组件实例详解
Oct 19 #Javascript
值得收藏的八个常用的js正则表达式
Oct 19 #Javascript
深入理解移动前端开发之viewport
Oct 19 #Javascript
You might like
php 计划任务 检测用户连接状态
2012/03/29 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
js对象的构造和继承实现代码
2010/12/05 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
Angular2库初探
2017/03/01 Javascript
jQuery实现的点击图片居中放大缩小功能示例
2019/01/16 jQuery
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
js实现选项卡效果
2020/03/07 Javascript
vue实例的选项总结
2020/06/09 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
python使用心得之获得github代码库列表
2014/06/25 Python
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
python xml解析实例详解
2016/11/14 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
python如何保存文本文件
2020/06/07 Python
浅谈TensorFlow中读取图像数据的三种方式
2020/06/30 Python
浅谈盘点5种基于Python生成的个性化语音方法
2021/02/05 Python
StubHub巴西:购买和出售您的门票
2016/07/22 全球购物
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
应聘美工求职信
2013/11/07 职场文书
警校毕业生自我评价
2014/04/06 职场文书
推荐信格式要求
2014/05/09 职场文书
岗位标兵事迹材料
2014/05/17 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
学生保证书格式
2015/02/27 职场文书
业务员辞职信范文
2015/03/02 职场文书
教师节感想
2015/08/11 职场文书