在小程序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 相关文章推荐
Extjs Ajax 乱码问题解决方案
Apr 15 Javascript
JavaScript 代码压缩工具小结
Feb 27 Javascript
ajax处理php返回json数据的实例代码
Jan 24 Javascript
jquery Tab效果和动态加载的简单实例
Dec 11 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
Jan 07 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
Feb 13 Javascript
JavaScript中getUTCSeconds()方法的使用详解
Jun 11 Javascript
浅谈JavaScript字符串拼接
Jun 25 Javascript
jQuery自制提示框tooltip改进版
Aug 01 Javascript
浅谈vue的踩坑路
Aug 31 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
Nov 28 Javascript
vue 中Virtual Dom被创建的方法
Apr 15 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中截取字符串支持utf-8
2007/01/18 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
js判断一个字符串是否包含一个子串的方法
2015/01/26 Javascript
Node.js和MongoDB实现简单日志分析系统
2015/04/25 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
JS实现的几个常用算法
2016/11/12 Javascript
react native带索引的城市列表组件的实例代码
2017/08/08 Javascript
webpack之devtool详解
2018/02/10 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
原生JavaScript实现购物车
2021/01/10 Javascript
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
python使用正则搜索字符串或文件中的浮点数代码实例
2014/07/11 Python
Python连接mysql数据库的正确姿势
2016/02/03 Python
Python操作Access数据库基本步骤分析
2016/09/19 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2017/12/11 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
HTML5 LocalStorage 本地存储刷新值还在
2017/03/10 HTML / CSS
PHP两种查询函数array/row的区别
2013/06/03 面试题
单位单身证明范本
2014/01/11 职场文书
学雷锋活动总结报告
2014/06/26 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
个人职业及收入证明
2014/10/13 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
python3 hdf5文件 遍历代码
2021/05/19 Python