在小程序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 相关文章推荐
关于javascript中的typeof和instanceof介绍
Dec 04 Javascript
Js+php实现异步拖拽上传文件
Jun 23 Javascript
AngularJS 过滤器的简单实例
Jul 27 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
Sep 04 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
Jul 07 Javascript
JS按钮闪烁功能的实现代码
Jul 21 Javascript
vue 中滚动条始终定位在底部的方法
Sep 03 Javascript
js简单遍历获取对象中的属性值的方法示例
Jun 19 Javascript
详解微信小程序开发之formId使用(模板消息)
Aug 27 Javascript
浅谈vuex为什么不建议在action中修改state
Feb 02 Javascript
react 生命周期实例分析
May 18 Javascript
vue-路由精讲 二级路由和三级路由的作用
Aug 06 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更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
javascript函数中的3个高级技巧
2016/09/22 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
Python算术运算符实例详解
2017/05/31 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
django实现用户注册实例讲解
2019/10/30 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
python 批量将中文名转换为拼音
2021/02/07 Python
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
会议接待欢迎词
2014/01/12 职场文书
大学学习生活感言
2014/01/18 职场文书
KTV的创业计划书范文
2014/02/02 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
王老吉广告词
2014/03/20 职场文书
2014年建筑工作总结
2014/11/26 职场文书
世界地球日活动总结
2015/02/09 职场文书
践行三严三实心得体会(2016推荐篇)
2016/01/06 职场文书
九年级历史教学反思
2016/02/19 职场文书
导游词之介休绵山
2019/12/31 职场文书
pycharm部署django项目到云服务器的详细流程
2021/06/29 Python
Python中文分词库jieba(结巴分词)详细使用介绍
2022/04/07 Python