uniapp计算字符串宽度

news/2024/10/2 14:27:55

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

本来呢,只需要在文本外包裹一个标签,不指定宽度,就能实现,但是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);  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/44797.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

服务器从hugging face下载数据集失败

问题 服务器没法下载外网数据导致hugging face的load_dataset下载失败。 解决方法 没找到load_dataset的源代码,想办法本地下载并上传到服务器,服务器从本地使用数据集。 示例:dataset = load_dataset("mit-han-lab/pile-val-backup", split="validation&quo…

微信小程序开发云环境,使用云函数实现通用印刷体识别, openapi.ocr.printedText

1.创建新项目时,要选中云开发,APPID不能使用测试号2.微信开发者工具,点击云开发,进行注册使用,刚开始是可以试用30天,之后是需要付费的。3.npm install --save wx-server-sdk@latest 终端安装此命令 https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/img…

ABC353F 分讨

回来补补题。 分析: 我先考虑 \(k\) 很大的时候,大块和大块间的移动,我们不得不尽量避免小块:我们容易发现这样时是最优的,可以发现就是在斜着走,也就是典型的切比雪夫距离。斜着走一次需要经过两条边,所以花费是两倍的切比雪夫距离。 要是起点和终点不在大块上呢? 首先…

数据可视化是如何在智慧水利中应用的?

数据可视化是如何在智慧水利中应用的?在现代水利管理中,面对复杂的水资源数据和动态变化的水文情况,数据可视化技术通过将繁杂的数据转化为直观、易理解的图表和图形,极大地提升了水利管理的效率和决策的科学性。智慧水利利用数据可视化技术,实现了对水资源的全面监控、精…

CloudEvents-云原生事件规范

简介 CloudEvents 是一种定义事件数据在云端应用之间如何交付的规范,这是由 Cloud Native Computing Foundation(CNCF)的 Serverless 工作小组开发的。通过提供统一的事件格式,CloudEvents 旨在简化跨服务、平台和供应商的事件交付。 CloudEvents位于CNCF全景图的”流和消息…

MyBatisX插件生成代码

MyBatisX插件 MyBatis Plus提供了一个IDEA插件——MybatisX,使用它可根据数据库快速生成Entity、Mapper、Mapper.xml、Service、ServiceImpl等代码,使用户更专注于业务。 下面演示具体用法安装插件在IDEA插件市场搜索MyBatisX,进行在线安装配置数据库连接在IDEA中配置数据库连…

【专题】2022年建筑近零碳升级白皮书报告PDF合集分享(附原数据表)

原文链接:https://tecdat.cn/?p=34225 原文出处:拓端数据部落公众号 近零碳建筑的减碳路径涵盖了近零能耗建筑的技术理念,包括被动式节能和主动式节能,以及建筑整体的智能化和人性化改造。此外,加大新能源系统的建设力度和采用购买国家核证自愿减排量等碳交易方式,也是为…

云终端连接工作站,实现用户和资产分离方案

为了实现工作站主机和用户的分离,并确保资产的安全管理,本方案采用远程桌面和终端登录的方式,使用户通过远程访问桌面来完成日常工作。 方案在工作站上部署 DDP Server,通过JC36云终端的DDP协议连接。可以实现4K 60帧的效果,满足设计和游戏的需求。 此方案不仅可以集中管理…