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
    }

},
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • canvas元素的基础知识 在页面上放置一个canvas元素,就相当于在页面上放置了一块画布,可以在其中进行图形的...
    oWSQo阅读 13,481评论 0 19
  • 第一章 HTML5 (2014年10月29日发布)新特性: 10个 (1)新的语义标签 (2)增强型表单 (3)视...
    fastwe阅读 4,509评论 0 1
  • 线条样式 绘制直线,第五章知识简单回顾 lineWidth 设置或返回当前的线条宽度,单位为像素 lineCap ...
    Zd_silent阅读 3,388评论 0 0
  • HTML5 中新增的一个相当于画布的标签,自带各种 API ,通过 JS 调用和搭配,实现图案绘制和想要的效果。 ...
    Primers阅读 5,314评论 0 1
  • 不破不立,不见不散 来来来,又要跨年了呢~ 过了30岁,应该对长(bian)大(lao)都会有点恐惧吧,反正我是…...
    上海滩的冯程程阅读 2,415评论 0 0