canvas字体换行

canvas绘制的字体换行

问题描述:canvas绘制的字体是不会自动换行的,也没有相关的api,所以我们想要canvas文字自动换行,只能利用js从字体长度或字数入手

相关api:canvas measureText()在画布上输出文本之前,检查字体的宽度
利用这个方法我们可以在文字超出指定长度后做换行处理

HTML

<div class="mask_operation" v-show="cvsshow" @click="createdImg">
    <div class="cvs-box">
        <canvas id="mycvs" ref="cvs" width="300" height="369"></canvas>
    </div>
</div>

js

createdImg(){
    //$refs.cvs获取vue的dom节点(原生的直接document获取dom节点)
    let cvs = this.$refs.cvs
    let ctx=cvs.getContext("2d");
    this.drawtext(ctx,'在画布上输出文本之前,检查字体的宽度',15,245,168)
}


// 文字换行
drawtext(ctx,t,x,y,w){
    //参数说明
    //ctx:canvas的 2d 对象,t:绘制的文字,x,y:文字坐标,w:文字最大宽度
    let chr = t.split("")
    let temp = ""
    let row = []

    for (let a = 0; a<chr.length;a++){
        if( ctx.measureText(temp).width < w && ctx.measureText(temp+(chr[a])).width <= w){
            temp += chr[a];
        }else{
            row.push(temp);
            temp = chr[a];
        }
    }
    row.push(temp)
    for(let b=0;b<row.length;b++){
        ctx.fillText(row[b],x,y+(b+1)*20);//每行字体y坐标间隔20
    }

},
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值