在小程序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 相关文章推荐
通过身份证号得到出生日期和性别的js代码
Nov 23 Javascript
深入了解javascript中的prototype与继承
Apr 14 Javascript
js与jQuery 获取父窗、子窗的iframe
Dec 20 Javascript
一段非常简单的js判断浏览器的内核
Aug 17 Javascript
深入学习JavaScript中的Rest参数和参数默认值
Jul 28 Javascript
JavaScript设置表单上传时文件个数的方法
Aug 11 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
Sep 20 Javascript
微信小程序封装http访问网络库实例代码
May 24 Javascript
Vue2 模板template的四种写法总结
Feb 23 Javascript
详解几十行代码实现一个vue的状态管理
Jan 28 Javascript
详解如何使用nvm管理Node.js多版本
May 06 Javascript
用JS实现飞机大战小游戏
Jun 09 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获取四位字母和数字的随机数的实现方法
2015/01/09 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
php使用PDO事务配合表格读取大量数据插入操作实现方法
2017/02/16 PHP
javascript 得到变量类型的函数
2010/05/19 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
2016/06/07 Javascript
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
vue 将多个过滤器封装到一个文件中的代码详解
2020/09/05 Javascript
python计算时间差的方法
2015/05/20 Python
Python反转序列的方法实例分析
2018/03/21 Python
详解python单元测试框架unittest
2018/07/02 Python
python样条插值的实现代码
2018/12/17 Python
python实现石头剪刀布小游戏
2021/01/20 Python
Django保护敏感信息的方法示例
2019/05/09 Python
提升Python效率之使用循环机制代替递归函数
2019/07/23 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
python怎么判断素数
2020/07/01 Python
Python+OpenCV图像处理—— 色彩空间转换
2020/10/22 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
弘扬职业精神演讲稿
2014/03/20 职场文书
幼儿园老师寄语
2014/04/03 职场文书
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
2014国庆黄金周超市促销活动方案
2014/09/21 职场文书
招标保密承诺书
2015/01/20 职场文书
人事文员岗位职责
2015/02/04 职场文书
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL