首页 > 其他分享 >canvas 如何自动去换行

canvas 如何自动去换行

时间:2024-08-23 12:03:54浏览次数:11  
标签:canvas const 换行 自动 context line 文本

在HTML canvas上绘制文本时,如果文本超出了canvas的宽度,它不会自动换行。要实现自动换行,你需要手动计算文本的长度并在适当的位置进行换行。

以下是一个简单的JavaScript函数,它使用canvas的measureText方法来计算文本的长度,并在达到指定宽度时自动换行:

function wrapText(context, text, x, y, maxWidth, lineHeight) {
  const words = text.split(' ');
  let line = '';
  for (let n = 0; n < words.length; n++) {
    const testLine = line + words[n] + ' ';
    const metrics = context.measureText(testLine);
    const testWidth = metrics.width;
    if (testWidth > maxWidth && n > 0) {
      context.fillText(line, x, y);
      line = words[n] + ' ';
      y += lineHeight;
    } else {
      line = testLine;
    }
  }
  context.fillText(line, x, y);
}

const canvas = document.getElementById('myCanvas');
const context = canvas.getContext('2d');
const text = '这是一个示例文本,用于展示如何在Canvas中实现自动换行。';
const maxWidth = 200;
const lineHeight = 25;
const x = 10;
const y = 30;

context.font = '16px Arial';
context.fillStyle = '#000';
wrapText(context, text, x, y, maxWidth, lineHeight);

在这个例子中,maxWidth 是你想要文本自动换行的最大宽度,lineHeight 是每行文本的高度。函数会将文本分割成单词,并在单词间添加空格,然后检查每个测试行的宽度。如果宽度超过了最大宽度,它就在上一个单词后面换行。

标签:canvas,const,换行,自动,context,line,文本
From: https://www.cnblogs.com/tanweiwei/p/18375744

相关文章

  • freeswitch 32秒自动挂断问题
    freeswitch32秒自动挂断问题说明:首次发表日期:2024-08-23参考:https://serverfault.com/questions/1008661/freeswitch-drops-calls-after-32-secondshttps://blog.csdn.net/qq_32110203/article/details/141126033https://stackoverflow.com/questions/73708045/freeswitc......
  • Simulink自动生成Park变换模块的C代码过程
    Simulink自动生成Park变换模块的C代码过程第一步:在matlab当前文件夹下,建立simulink模型文件。如下图所示。 第二步:搭建park函数模块。在Simscape工具箱中的transformers子工具箱下找到相应的模块,添加输入输出端口。 第三步:代码生成环境配置。(1)点击modelconfigur......
  • Oracle 11g 自动统计信息收集
    在Oracle11g中,默认有3个自动任务,分别是:自动统计信息收集、SQL调优顾问、段空间调整顾问,查看方法如下:colCLIENT_NAMEfora40colTASK_NAMEfora40colOPERATION_NAMEfora40SELECTCLIENT_NAME,TASK_NAME,OPERATION_NAME,STATUSFROMdba_autotask_task; 自动统计信息收......
  • HtmlUnit:自动化操作web页面的java工具
    java有httpclient等工具,可以模拟进行一些web操作,但一些逻辑是在前端js中执行的,此时httpclient就比较困难了。此时可以考虑使用HtmlUnit,模拟出一个浏览器,全程在浏览器中操作。 本文以在百度中输入搜索关键字->点击“百度一下”按钮->打印搜索结果这一过程为例,演示HtmlUnit的......
  • AC 自动机查漏补缺
    AC自动机查漏补缺前言今年1月份学过一次,当时自以为掌握得很好,实际上就是依托答辩。而且还有很多地方是有严重误导性的。所以这篇查漏补缺就是记录一下自己对AC自动机尚不完全掌握的地方。并对之前的那篇不太正确的题解进行纠正。因此,在这样的背景下,这篇文章注定就不是给初......
  • 免输密码全自动登录金山文档Windows客户端 2024年8月22日
     免输密码全自动登录金山文档Windows客户端2024年8月22日  ;免输密码全自动登录金山文档Windows客户端2024年8月22日;;指纹加密U盘&FindText-v9.7-by-FeiYue&Loop-if-break&金山文档&Index-Your-Files&mstsc&零层壹号&WinSCP&USMv5&Acronis-true-Image-2021-WinPE&......
  • Selenium + Python 自动化测试22(PO+数据驱动)
            我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。上一篇我们讨论了PO模式和unittest框架结合起来使用。        本篇文章我们综合一下之前学习的内容,如先将PO模式、数据驱动思想和我们生成HTML报告融合起来,综合的灵活的使用......
  • 解锁未来财富密码:AI自动化副业创收班——终身财富加速器
    副业创收已经成为行业趋势,在当前经济形势下,许多人面临着行业裁员的不确定性。为了增强个人的抗风险能力,寻求一份副业已经成为一种重要的趋势。这不仅是经济上的补充,更是对自由与独立的一种追求——它应让你自主掌控,不被外界束缚。通过精心打造的副业,你不仅可以灵活安排时间,享受到......
  • 安防监控/视频分析EasyCVR视频监控汇聚管理平台登录1分钟之后自动退出是什么原因?
    EasyCVR视频监控汇聚管理平台是一款针对大中型项目设计的跨区域网络化视频监控集中管理平台。该平台不仅具备视频资源管理、设备管理、用户管理、网络管理和安全管理等功能,还支持多种主流标准协议,如GB28181、RTSP/Onvif、RTMP、部标JT808、GA/T1400协议等,以及厂家的私有协议和SDK......
  • jenkins 自动安装 和 手动安装java 或者一些其他环境配置的区别
    由于之前的jenkins存在安全漏洞,升级了jenkins,相应的jenkinsmaster服务器上的javajdk也一起升级为openjdk21.升级后发现:1.新的jenkins的slavenode启动的jar包下载后,在原来的slavenode服务器上面无法正常被执行了。这时我才知道原来升级了jenkins,对应的slavenode启动的jar......