canvas绘制文本内容自动换行

2019-01-13 admin

原型要求:

要求制作一个邀请卡页面,其中标题字数是动态的,最多可显示2行,如果超出2行则第2行内容结尾添加省略号。根据产品妹子的性格,四行这个设置到时很大机会改,所以这里一定不能写死,结果前几天真的要求改成了最多可显示4行 ,其他照旧。产品妹子too young :)!

废话不说,下面贴代码,献丑了!上代码之前先看一下需要传的参数!!


图文并茂的参数说明,原谅我捉急的PS技术和设计

图片描述

  1. ctx: 画布的上下文环境
  2. content: 需要绘制的文本内容
  3. drawX: 绘制文本的x坐标
  4. drawY: 绘制文本的y坐标
  5. lineHeight:文本之间的行高
  6. lineMaxWidth:每行文本的最大宽度
  7. lineNum:最多绘制的行数
// 文字自动换行
function textPrewrap(ctx, content, drawX, drawY, lineHeight, lineMaxWidth, lineNum) {
    var drawTxt = ''; // 当前绘制的内容
    var drawLine = 1; // 第几行开始绘制
    var drawIndex = 0; // 当前绘制内容的索引

    // 判断内容是否可以一行绘制完毕
    if(ctx.measureText(content).width <= lineMaxWidth) {
        ctx.fillText(content.substring(drawIndex, i), drawX, drawY);
    } else {
        for (var i = 0; i <= content.length; i++) {
            drawTxt += content[i];
            if (ctx.measureText(drawTxt).width > lineMaxWidth) {
                if (drawLine === lineNum) {
                    // 最后一行添加省略号
                    ctx.fillText(content.substring(drawIndex, i) + '...', drawX, drawY);
                    break;
                } else {
                    // 不是最后一行的情况
                    ctx.fillText(content.substring(drawIndex, i + 1), drawX, drawY);
                    drawIndex = i + 1;  // 记录当前行最后一个字符串的下一个idnex,用于绘制下行第一个字
                    drawLine += 1;  // 行数+1
                    drawY += lineHeight; // 绘制内容的y坐标对应增加行高
                    drawTxt = ''; // 重置绘制的内容
                }
            }
        }
    }
}

意外发现

在绘制文字的过程中发现,绘制文字的y坐标是**不是以文字上方做标准**,一图胜多言,上图!

浏览器环境: chrome 71.0.3578.98(正式版本)(64 位)

字体大小为40px

绘制的y坐标为0时,可以看到文本再左上角只漏了一点点出来

图片描述

绘制的y坐标为40时,可以看到文本可以完全显示

图片描述


后记

这是一个比较冷门的代码效果,但是也希望可以帮到有需要的朋友 如有帮助的请轻轻点下一个赞表示鼓励!谢谢 :) 如果看到这里首先很感谢花费您一些宝贵的时间看到这里,如有错误的地方希望各位大佬指出错误,谢谢:)

关闭手机闹钟,睡了!明天起来看 雷马大战 !哦吼

[转载]原文链接:https://segmentfault.com/a/1190000017869922

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。

转载请注明:文章转载自 JavaScript中文网 [https://www.javascriptcn.com]

本文地址:https://www.javascriptcn.com/read-50866.html

文章标题:canvas绘制文本内容自动换行

相关文章
jQuery使用append在html元素后同时添加多项内容的方法
本文实例讲述了jQuery使用append在html元素后同时添加多项内容的方法。分享给大家供大家参考。具体分析如下: 下面的代码可以同时在文本段落后添加多项内容 &lt;!DOCTYPE html&gt; &lt;html&gt; &lt...
2017-03-22
js实现类似新浪微博首页内容渐显效果的方法
本文实例讲述了js实现类似新浪微博首页内容渐显效果的方法。分享给大家供大家参考。具体分析如下: 要点一: if(list_li.length&gt;=1){ list.insertBefore(li,list_li[0]); }else{ ...
2017-03-22
JavaScript 常见安全漏洞和自动化检测技术
前言 随着 Web2.0 的发展以及 Ajax 框架的普及,富客户端 Web 应用(Rich Internet Applications,RIA)日益增多,越来越多的逻辑已经开始从服务器端转移至客户端,这些逻辑通常都是使用 JavaScri...
2017-03-29
jQuery实现自动滚动到页面顶端的方法
本文实例讲述了jQuery实现自动滚动到页面顶端的方法。分享给大家供大家参考。具体实现方法如下: $(&quot;.scroll&quot;).click(function(event) { &#x2F;&#x2F;prevent th...
2017-03-23
javascript实现框架高度随内容改变的方法
本文实例讲述了javascript实现框架高度随内容改变的方法。分享给大家供大家参考。具体如下: 有两种方法: 一、就是通过父页面改变 这里要理解框架的两个属性 contentWindow 和contentDocument 两个属性的意思和...
2017-03-27
用javascript实现自动输出网页文本
用javascript实现自动输出网页文本,用了setTimeout(),递归和String.substring();两个函数实现此功能,下面把实现代码分享给大家。 做出的效果就像是有一个打字员在打字. &lt;!doctype html...
2017-03-27
将页面table内容与样式另存成excel文件的方法
在项目做完之余,测试最近做的一个论坛,其中有个导出功能,发现点击网页导出按钮之后,将页面的table内容另存为excel文件后,却发现无法保存表格样式,经过问题分析之后找到根本原因,下面小编就把我的实现思路给大家分享如下: 问题描述: 问题...
2017-03-29
js如何实现点击标签文字,文字在文本框出现
js实现点击标签文字,文字出现在文本框里,下面2种方法实现的功能略有不同,总体来说方法一功能更强大。 第一种方法:随意点击任何标签都会出现在文本框中,如何第二次点击标签,对应的文字就会在文本框中消失。 &lt;style&gt;.c{ wi...
2017-03-29
js实现Select列表内容自动滚动效果代码
本文实例讲述了js实现Select列表内容自动滚动效果。分享给大家供大家参考。具体如下: 这里演示的Select列表内容自动滚动效果,文字可自动滚屏,当网页加载完毕后,Select中的内容会一个接一个向上滚动,当然,滚动的参数和速度是可以调...
2017-03-29
text-align:justify实现文本两端对齐 兼容IE
对于text-align 我们再熟悉不过了,可是它有个justify属性,平时很少用到,就鲜为人知了。justify是一种文本靠两边布局方式,一般应用于书刊杂志排版;合理运用text-align:justify 有时会省去很多开发的时间。 ...
2017-03-29
回到顶部