在小程序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 相关文章推荐
ExtJS实现文件下载的方法实例
Nov 09 Javascript
javascript unicode与GBK2312(中文)编码转换方法
Nov 14 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
Dec 14 Javascript
利用jQuary实现文字浮动提示效果示例代码
Dec 26 Javascript
js中将String转换为number以便比较
Jul 08 Javascript
正则表达式(语法篇推荐)
Jun 24 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
Oct 30 Javascript
JS+HTML+CSS实现轮播效果
Nov 28 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
Sep 03 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
Nov 13 Javascript
Vue.js自定义指令学习使用详解
Oct 19 Javascript
用javascript制作qq注册动态页面
Apr 14 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
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
php全排列递归算法代码
2012/10/09 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
2019/05/08 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
2020/11/12 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
Python获取DLL和EXE文件版本号的方法
2015/03/10 Python
Django实现组合搜索的方法示例
2018/01/23 Python
python+pyqt5实现24点小游戏
2019/01/24 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
python进行参数传递的方法
2020/05/12 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
美国女性服饰销售网站:Nasty Gal(坏女孩)
2016/07/26 全球购物
DELPHI面试题研发笔试试卷
2015/11/08 面试题
教师自我鉴定范文
2014/03/20 职场文书
法制教育演讲稿
2014/09/10 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
小学生作文批改评语
2014/12/25 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python