在小程序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 代码集(学习js的朋友可以看下)
Jul 22 Javascript
Javascript 继承实现例子
Aug 12 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
Feb 11 Javascript
JS延时提示框实现方法详解
Nov 26 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
Mar 01 Javascript
详解angular中的作用域及继承
May 31 Javascript
VUE前端cookie简单操作
Oct 17 Javascript
Windows下Node爬虫神器Puppeteer安装记
Jan 09 Javascript
微信小程序人脸识别功能代码实例
May 07 Javascript
浅入深出Vue之自动化路由
Aug 06 Javascript
解决vue打包后刷新页面报错:Unexpected token
Aug 27 Javascript
vue使用nprogress加载路由进度条的方法
Jun 04 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
图书管理程序(二)
2006/10/09 PHP
php生成WAP页面
2006/10/09 PHP
php 启动报错如何解决
2014/01/17 PHP
PHP里8个鲜为人知的安全函数分析
2014/12/09 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
js 加载时自动调整图片大小
2008/05/28 Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解
2013/11/05 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
聊一聊jQuery插件uploadify使用方法
2016/08/24 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
babel的使用及安装配置教程
2018/02/22 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
小程序实现多选框功能
2018/10/30 Javascript
Vue点击切换Class变化,实现Active当前样式操作
2020/07/17 Javascript
Python 解析XML文件
2009/04/15 Python
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
Python selenium 三种等待方式解读
2016/09/15 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
如何运行带参数的python脚本
2019/11/15 Python
Python列表切片常用操作实例解析
2019/12/16 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
丝芙兰香港官网:Sephora香港
2018/03/13 全球购物
计算机操作自荐信
2013/12/07 职场文书
建筑工地质量标语
2014/06/12 职场文书
小学亲子活动总结
2014/07/01 职场文书
工资收入证明
2014/10/07 职场文书
班主任经验交流材料
2014/12/16 职场文书
入党积极分子培养人意见
2015/06/02 职场文书
MySQL 分组查询的优化方法
2021/05/12 MySQL
一篇文章学会Vue中间件管道
2021/06/20 Vue.js
zabbix配置nginx监控的实现
2022/05/25 Servers