在小程序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学习笔记之 函数篇(一) : 函数声明和函数表达式
Jun 24 Javascript
jQuery 遍历函数详解
Jul 05 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
Nov 17 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
Nov 24 Javascript
Javascript之Number对象介绍
Jun 07 Javascript
JS实现移动端整屏滑动的实例代码
Nov 10 Javascript
详解vue添加删除元素的方法
Jun 30 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
Aug 04 Javascript
Angular使用Restful的增删改
Dec 28 Javascript
postman自定义函数实现 时间函数的思路详解
Apr 17 Javascript
vue页面切换项目实现转场动画的方法
Nov 12 Javascript
javascript跳转与返回和刷新页面的实例代码
Nov 20 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
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
javascript模拟的Ping效果代码 (Web Ping)
2011/03/13 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
2017/01/19 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
angular 组件通信的几种实现方式
2018/07/13 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
小程序云开发实战小结
2018/10/25 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
VUE前后端学习tab写法实例
2019/08/06 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
Vue 401配合Vuex防止多次弹框的案例
2020/11/11 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
Python 描述符(Descriptor)入门
2016/11/20 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
企划经理的岗位职责
2013/11/17 职场文书
物流管理专业毕业生求职信
2014/03/23 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
企业介绍信范文
2015/01/30 职场文书
高三生物教学反思
2016/02/22 职场文书
mysql主从复制的实现步骤
2021/10/24 MySQL