码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • HTML5 Canvas 限定文本区域大小,文字自动换行,自动缩放


    1. <!DOCTYPE html>
    2. <html>
    3. <body>
    4. <h1>HTML5 Canvas 限定文本展示范围、自动计算缩放字体大小</h1>
    5. <div id="tips">0</div>
    6. <div id="content">良田千顷不过一日三餐广厦万间只睡卧榻三尺良田千顷不过一日三餐广厦万间只睡卧榻三尺良田千顷不过一日三餐广厦万间只睡卧榻三尺良田千顷不过一日三餐广厦万间只睡卧榻三尺卧尺卧尺厦厦万间只睡卧榻三尺卧尺卧尺万间只睡卧榻三尺良田千顷不过一日三餐广厦万间只睡卧榻三尺良田千顷不过一日三餐广厦万间只睡卧榻三尺良田千顷不过一日三餐广厦万间只睡卧榻三尺卧尺卧尺厦万间只睡卧榻三尺卧尺厦万榻三尺卧尺卧尺榻三间只睡三</div>
    7. <script>
    8. // 默认字体16px,最多一行显示18个字,8行。
    9. // 超出范围后,自动缩小字体。
    10. let maxWidth = 2304; // 合法最大宽度(字体为16px、18个字、8行时的宽度)
    11. let minSize = 10; // 限制最小字号(支持缩到最小的字体大小)
    12. let eleContent = document.getElementById('content');
    13. let eleTips = document.getElementById('tips'); // 将 eleTips 声明为全局变量
    14. let content = eleContent.innerText; // 获取文本内容
    15. let fontSize = calculateFontSize(content, minSize, maxWidth);
    16. eleContent.style.fontSize = fontSize + "px"; // 重设字号
    17. eleTips.innerText = '自适应字体大小:' + fontSize + "px";
    18. function calculateFontSize(text, minSize, maxWidth) {
    19. let fontSize = 16; // 初始字体大小
    20. let currWidth = 0;
    21. while (true) {
    22. const ctx = document.createElement("canvas").getContext("2d");
    23. ctx.font = fontSize + "px arial,sans-serif";
    24. currWidth = ctx.measureText(text).width;
    25. //eleTips.innerText = currWidth; // 在函数内部访问 eleTips
    26. console.log('当前字号:'+fontSize+'px,当前宽度:'+currWidth+',偏差宽度:'+(currWidth-maxWidth));
    27. //console.log(currWidth)
    28. if (fontSize <= minSize || maxWidth >= currWidth) {
    29. break;
    30. }
    31. fontSize--;
    32. }
    33. return fontSize;
    34. }
    35. </script>
    36. <style>
    37. div#content {
    38. width: 290px;
    39. height: 170px;
    40. border: 1px solid red;
    41. font: 16px arial, sans-serif;
    42. word-wrap: break-word;
    43. }
    44. </style>
    45. </body>
    46. </html>

    演示效果:

  • 相关阅读:
    网页css+html实现登录界面的分步奏操作详解+完整代码后期会完备python后端教程
    MySQL - 为什么InnoDB选择B+树索引?Change buffer?
    稍微有点坑的bfs
    异步电机直接转矩控制学习
    【数据库系统概论】关系数据库中的关系完整性
    Spring Boot实现通用 Auth 认证的 4 种方式
    Node.Js基础知识
    Vue3 —— 常用 Composition API(一)(computed函数、watch函数、watchEffect函数、生命周期钩子)
    SpringBoot缓存之Ehcache详解
    磺化-β-环糊精两亲性蒽醚聚集诱导发光微球/AIE环糊精超分子微球/氧化硅修饰AIE微球
  • 原文地址:https://blog.csdn.net/qq285679784/article/details/136236724
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号