• 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>

    演示效果

  • 相关阅读:
    深入理解Java内存模型JMM与volatile关键字
    Leetcode101.对称二叉树
    时间空间复杂度
    GIT技巧
    开发者高评分IDE工具盘点
    【dp】背包问题
    彻底删除git历史记录中的文件
    CPP代码检查工具
    阿里云python训练营-Python基础学习03
    排序算法——简单选择排序
  • 原文地址:https://blog.csdn.net/qq285679784/article/details/136236724