在小程序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 相关文章推荐
Tab页界面,用jQuery及Ajax技术实现
Sep 21 Javascript
让iframe子窗体取父窗体地址栏参数(querystring)
Oct 13 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
Feb 07 Javascript
Javascript:为input设置readOnly属性(示例讲解)
Dec 25 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
Jul 18 Javascript
基于JavaScript实现跳转提示页面
Sep 24 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
Oct 09 Javascript
利用jQuery实现一个简单的表格上下翻页效果
Mar 14 Javascript
无循环 JavaScript(map、reduce、filter和find)
Apr 08 Javascript
jQuery事件委托代码实践详解
Jun 21 jQuery
JS异步处理的进化史深入讲解
Aug 25 Javascript
利用JavaScript模拟京东按键输入功能
Dec 01 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编写文件多服务器同步程序
2016/07/02 PHP
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
Python urlopen()函数 示例分享
2014/06/12 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
PyTorch上实现卷积神经网络CNN的方法
2018/04/28 Python
Python中修改字符串的四种方法
2018/11/02 Python
springboot配置文件抽离 git管理统 配置中心详解
2019/09/02 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
Trip.com澳大利亚:在线旅行社
2019/12/01 全球购物
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
CLR与IL分别是什么含义
2016/08/23 面试题
大一学生假期实习的自我评价
2013/10/12 职场文书
服务中心夜班服务员岗位职责
2013/11/27 职场文书
公司口号大全
2014/06/11 职场文书
实习工作表现评语
2014/12/31 职场文书
国家助学金感谢信
2015/01/21 职场文书
置业顾问岗位职责
2015/02/09 职场文书
2016年五四青年节校园广播稿
2015/12/17 职场文书