在小程序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获得服务器端控件的ID的实现代码
Dec 28 Javascript
让网页跳转到指定位置的jquery代码非书签
Sep 06 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
Sep 16 Javascript
Flexigrid在IE下不显示数据的有效处理方法
Sep 04 Javascript
浅谈JavaScript的内置对象和浏览器对象
Jun 03 Javascript
JavaScript事件详细讲解
Jun 27 Javascript
javascript设计模式Constructor(构造器)模式
Aug 19 Javascript
AngularJS实现页面定时刷新
Mar 14 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
May 11 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
Aug 26 Javascript
基于jstree使用AJAX请求获取数据形成树
Aug 29 Javascript
Vue中用JSON实现刷新界面不影响倒计时
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获取网页标题的3种实现方法代码实例
2014/04/11 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
PHP内置的Math函数效率测试
2014/12/01 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
javascript中的onkeyup和onkeydown区别介绍
2013/04/28 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
2014/02/11 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
2020/11/25 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
Python中的tuple元组详细介绍
2015/02/02 Python
python基于socket实现网络广播的方法
2015/04/29 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
2019/01/10 Python
Python基础知识点 初识Python.md
2019/05/14 Python
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
高校教师自荐信范文
2014/03/13 职场文书
个人课题方案
2014/05/08 职场文书
幼儿园托班教育随笔
2015/08/14 职场文书
解析MySQL binlog
2021/06/11 MySQL
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA