首页 > 其他分享 >uniapp计算字符串宽度

uniapp计算字符串宽度

时间:2024-06-17 17:44:15浏览次数:14  
标签:uniapp canvas 字体大小 text 宽度 字符串 Arial

最近手机端聊天功能,想实现气泡框,根据输入的文本,背景颜色自动适应宽度

本来呢,只需要在文本外包裹一个标签,不指定宽度,就能实现,但是nvue中文本只能写在text中,来实现字体大小颜色的设置,在使用text标签后就会导致文本框宽度直接就是最长

第一种方法:

所以需要计算字符串的宽度,第一想法就是用str.length计算字符串长度,然后根据字体大小,预估一个大概宽度,然后直接长度*宽度,但是结果很明显不正确,小写字母于大写字母的宽度不一样,中文字跟数字宽度不一样,等等不同,还有很多,当然如果你把宽度设置到很大时,宽到足以容下最大的一个字符,很明显,这种方式当我输入全数字或全小写字母,就会导致尾巴很长,不美观。

第二种方法:

字母比汉字宽度小,同时字母字节也比汉字小,所以直接循环字符串计算字符字节,根据不同字节数,取不同的宽度,这种方法较上一个方法好很多,但是在标点符号的使用上依然有问题,这一块我还没有搞清楚,例如中文冒号,肉眼看与汉字大小一样,但是如果你输入一段文字中间包含中午冒号,就会换行,还没到最大宽度。同时,这个方法也会出现第一种的弊端,尾巴变长或变短,有强迫症的忍不了一点。

第三章方法:

canvas.measureText(text) 即:在画布上输出文本之前,检查字体的宽度

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.font="30px Arial";//可以输入字体大小,字体样式,浏览器内置计算宽度
var txt="Hello World"
console.log(ctx.measureText(txt).width)//结果

 uniapp实现

const canvas = uni.createCanvasContext('myCanvas', this);
canvas.font = '10px Arial'; // 设置字体和大小,例如 "16px Arial"  
const metrics = canvas.measureText(text);  

 

标签:uniapp,canvas,字体大小,text,宽度,字符串,Arial
From: https://www.cnblogs.com/yuxuan-light-of-Taihu-Lake/p/18252889

相关文章

  • 【c语言】字符串函数和内存函数
    ......
  • uniapp中防抖函数debounce的使用
    uniapp中防抖函数debounce的使用分段控件u-subsection每次点击一个tab的时候都会ajax访问一次接口取列表数据的,这时如果有人快速在多个分段间快速点击的话,每次点击都会访问接口的,网上找了好多资料,终于找到了这个玩意。。。记得以前也弄过这个的。。不过当时没有记下来,现在记下来......
  • 字符串— padStart() 和 padEnd()
    在今天的教程中,我们将一起来学习新的字符串,padStart()和padEnd(),它可以帮助我们实现用另一个字符串填充一个字符串,直到结果字符串达到给定的长度。下面,我们就开始今天的内容吧。String.prototype.padStart()padStart()方法从字符串的开头用另一个字符串填充一个字符串到一定......
  • 字符串— trim()、trimStart() 和 trimEnd()
    在今天的教程中,我们将一起来学习JavaScript字符串trim()、trimStart()和trimEnd()。01、trim()学习如何使用JavaScript trim()方法从字符串的两端删除空格字符。JavaScripttrim()方法介绍String.prototype.trim()返回一个从字符串开头和结尾去除空白字符的新字符串:......
  • 如何确定 OpenSCAD 中文本的宽度?
    在OpenSCAD中,我希望能够创建一个模块,该模块接受一个字符串,然后创建一个3-D对象,并将该字符串作为text嵌入表面。我希望对象略大于文本,因此我需要知道文本的宽度,以便创建大小合适的对象。我不确定如何查询text......
  • 什么是模板字符串?
    模板字符串(TemplateLiterals)是ES6(ECMAScript2015)中引入的一种新的字符串表示方法,允许我们嵌入表达式,并在运行时将它们转换为字符串。模板字符串使用反引号(```)来定义,而不是传统的单引号(')或双引号(")。模板字符串的主要特点包括:1.嵌入表达式:使用${expression}语法,可以在模板字......
  • PTA JAVA 7-5 sdust-Java-字符串集合求并集
    7-5sdust-Java-字符串集合求并集分数20全屏浏览切换布局作者 张峰单位 山东科技大学从键盘接收N个英文字符串(其中不同的字符串数量大于10),从头开始取5个不同的字符串放入一个集合S1,然后接着取5个不同的字符串放入另一个集合S2,按照字母顺序输出S1和S2的并集中的每个......
  • 代码随想录第11天 | ●字符串总结 ●双指针回顾
    字符串总结字符串是若干字符组成的有限序列,也叫字符数组。C语言中,把字符存入数组,以结束符'\0'为结束标志,'\0'可作为判断依据c++中,提供string类,string类提供各种接口,其中size()可作为结束判断标志。vector<char>和string相差不大,string类提供处理字符串的接口更多字符串类......
  • 升级到.Net 8 api 返回JObject 对象为空字符串
    在使用dotnet8过程中,使用了JObject类型作为api的返回,但是返回的空数组api:[HttpGet("voices")]publicasyncTask<IActionResult>GetObject(){JObjectobj=newJObject();obj["test"]="test";returnnewJsonResult(obj){StatusCod......
  • day8字符串
    有一说一,又是一道题都做不出来的一天KMP感觉理解了,但是敲不对,有点麻一道一道记录下题目:https://leetcode.cn/problems/reverse-words-in-a-string/解析:https://programmercarl.com/0151.翻转字符串里的单词.html#算法公开课这道题的精髓是消除所有空格:stringstripSpaces......