在小程序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 相关文章推荐
巧妙破除网页右键禁用的十大绝招
Aug 12 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
Jun 02 Javascript
利用Jquery实现可多选的下拉框
Feb 21 Javascript
JSON.parse()和JSON.stringify()使用介绍
Jun 20 Javascript
js变量、作用域及内存详解
Sep 23 Javascript
js带缩略图的图片轮播效果代码分享
Sep 14 Javascript
原生js实现弹出层效果
Jan 20 Javascript
详解Angular2 之 结构型指令
Jun 21 Javascript
Vue 2.0入门基础知识之内部指令详解
Oct 15 Javascript
使用Vue完成一个简单的todolist的方法
Dec 01 Javascript
解决echarts数据二次渲染不成功的问题
Jul 20 Javascript
vue实现简单的登录弹出框
Oct 26 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来处理多个提交任务
2006/10/09 PHP
preg_match_all使用心得分享
2014/01/31 PHP
微信支付扫码支付php版
2016/07/22 PHP
javascript html 静态页面传参数
2009/04/10 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
2014/05/27 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
JQuery遍历DOM节点的方法
2015/06/11 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
浅谈node中的exports与module.exports的关系
2017/08/01 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
2018/09/26 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
python自动化测试之连接几组测试包实例
2014/09/28 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
Python re正则表达式元字符分组()用法分享
2020/02/10 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
python解释器pycharm安装及环境变量配置教程图文详解
2020/02/26 Python
详解Canvas事件绑定
2018/06/27 HTML / CSS
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
幼儿园亲子活动方案
2014/01/29 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
实习协议书范本
2014/09/25 职场文书
导游词300字
2015/02/13 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
遗愿清单观后感
2015/06/09 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
Python标准库pathlib操作目录和文件
2021/11/20 Python