canvas实现文字自动换行,段落居中,单行的时候居中

canvas实现文字自动换行,段落居中,单行的时候居中方法,主要用到以下方法:

/****绘制自动换行的字符串****/
    //ctx_2d        getContext("2d") 对象  
    //lineheight    段落文本行高  
    //bytelength    设置单字节文字一行内的数量  
    //text          写入画面的段落文本  
    //startleft     开始绘制文本的 x 坐标位置(相对于画布)  
    //starttop      开始绘制文本的 y 坐标位置(相对于画布)  
    //ctx_fillStyle      字体颜色
    //ctx_font      字体
    //istrue 是否设置
    function writeTextOnCanvas(ctx_2d, lineheight, bytelength, text ,startleft, starttop,ctx_fillStyle,ctx_font,istrue){  
        function getTrueLength(str){//获取字符串的真实长度(字节长度)  
            var len = str.length, truelen = 0;  
            for(var x = 0; x < len; x++){  
                if(str.charCodeAt(x) > 128){  
                    truelen += 2;  
                }else{  
                    truelen += 1;  
                }  
            }  
            return truelen;  
        }  
        function cutString(str, leng){//按字节长度截取字符串,返回substr截取位置  
            var len = str.length, tlen = len, nlen = 0;  
            for(var x = 0; x < len; x++){  
                if(str.charCodeAt(x) > 128){  
                    if(nlen + 2 < leng){  
                        nlen += 2;  
                    }else{  
                        tlen = x;  
                        break;  
                    }  
                }else{  
                    if(nlen + 1 < leng){  
                        nlen += 1;  
                    }else{  
                        tlen = x;  
                        break;  
                    }  
                }  
            }  
            return tlen;  
        }  
        if(text.length<17 && istrue==1){
        	ctx_2d.textAlign="center";
            
        }else{
        	if(istrue==1){
        		ctx_2d.textAlign="";
        		startleft=130;
        	}			
        }
        for(var i = 1; getTrueLength(text) > 0; i++){  
            var tl = cutString(text, bytelength); 
            ctx_2d.fillStyle= ctx_fillStyle; //字体颜色
            ctx_2d.font= ctx_font; //字体 
            ctx_2d.fillText(text.substr(0, tl).replace(/^\s+|\s+$/, ""), startleft, (i-1) * lineheight + starttop); 
            
            text = text.substr(tl);  
        }  
    }

调用方法:

let canvas = document.createElement('canvas')
canvas.width = "608"
canvas.height = "1080"  //创建画布,并设置宽高
let ctx = canvas.getContext("2d")
var ctName = "我是文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字"
// 对象 - 行高  - 文字一行内的数量  -文本 - x 坐标位置 -y
writeTextOnCanvas(ctx,30,500,ctName,263,979,'#fff','normal 18px Microsoft YaHei',0);  //名字 +头衔

说明:这个方法采用设置文字区块的宽度,来达到文字版块居中,另一方面考虑文字不到一行的情况下,通过以下方法判断,给文字加居中选项

 if(text.length<17 && istrue==1){
    ctx_2d.textAlign="center";      
 }else{
        if(istrue==1){
        ctx_2d.textAlign="";
        startleft=130;
     }			
 }

此判断文字个数是否达到指定个数,达到的话就移除textAlign="center"文字居中属性,否则就增加textAlign="center"属性,并设置距离y轴距离。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季夏梧桐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值