在小程序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 相关文章推荐
jquery批量控制form禁用的代码
Aug 06 Javascript
js中使用replace方法完成某个字符的转换
Aug 20 Javascript
JS动态显示表格上下frame的方法
Mar 31 Javascript
jQuery滚动监听实现商城楼梯式导航效果
Mar 06 Javascript
理解 Node.js 事件驱动机制的原理
Aug 16 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
Sep 28 Javascript
jquery实现的简单轮播图功能【适合新手】
Aug 17 jQuery
Angular ElementRef简介及其使用
Oct 01 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
Oct 14 Javascript
关于vue组件事件属性穿透详解
Oct 28 Javascript
微信小程序如何实现点击图片放大功能
Jan 21 Javascript
JS如何判断对象是否包含某个属性
Aug 29 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通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
2015/11/05 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
javascript如何创建对象
2016/08/29 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
Vue项目利用axios请求接口下载excel
2020/11/17 Vue.js
浅谈python 四种数值类型(int,long,float,complex)
2016/06/08 Python
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
Python SQL查询并生成json文件操作示例
2018/08/17 Python
wxPython的安装与使用教程
2018/08/31 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
python连接mongodb集群方法详解
2020/02/13 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
歌颂祖国的演讲稿
2014/05/04 职场文书
高中教师考核方案
2014/05/18 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
普通党员个人剖析材料
2014/10/08 职场文书
贷款担保书
2015/01/20 职场文书
2016公司年会通知范文
2015/04/25 职场文书
总经理聘用协议书
2015/09/21 职场文书
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle