Canvas 常用方法

/*
绘制带有间距的文本
	text: 要绘制的文本
	x: 绘制文本的起始x坐标
	y: 绘制文本的起始y坐标
	space: 文本间距
	ctx: canvas对象
 */
canvasTextSpace(text, x, y, space, ctx) {
	let lineWidth = x;
	for(let i = 0; i < text.length; i++){
		if( i === 0) {
			ctx.fillText(text[i], x, y);
		}else {
			lineWidth += (space + ctx.measureText(text[i-1]).width);
			ctx.fillText(text[i], lineWidth, y);
		}
	}
},

/*
文本超出maxWidtth宽度,自动换行
	text: 要绘制的文本
	x: 绘制文本的起始x坐标
	y: 绘制文本的起始y坐标
	lineHeight: 与上一行文本的间距
	maxWidtth: 文本最大宽度
	ctx: canvas对象
 */
canvasTextAutoLine(text, x, y, lineHeight, maxWidtth, ctx){
	let textWidth = 0; // 文本宽度
	let lastSubStrIndex= 0;
	for(let i = 0; i < text.length; i++){
		textWidth += ctx.measureText(text[i]).width;
		if(textWidth > maxWidtth){
			ctx.fillText(text.substring(lastSubStrIndex,i), x, y);
			textWidth = 0;
			lastSubStrIndex = i;
			y += lineHeight
		}
		if(i === text.length - 1){
			ctx.fillText(text.substring(lastSubStrIndex,text.length), x, y);
		}
	}
},

/*
文本超出maxWidtth宽度,显示...
	text: 要绘制的文本
	x: 绘制文本的起始x坐标
	y: 绘制文本的起始y坐标
	maxWidtth: 文本最大宽度
	ctx: canvas对象
 */
canvasTextEllipsis(text, x, y, maxWidtth, ctx){
	let textWidth = 0; // 文本原长度
	let addDotTextWidth = 0; // 如果超出 文本的显示的实际长度
	let lastSubStrIndex = 0;
	let dotCount = 0; // 如果文本带有... 先记录下此时的文本长度
	let count = 0; // 如果文本超出 画...
	let dotWidth = ctx.measureText(' ...').width; // 计算 ...的宽度
	for(let i = 0; i < text.length; i++){
		textWidth += ctx.measureText(text[i]).width;
		if(textWidth > maxWidtth - dotWidth && !dotCount){
			addDotTextWidth = textWidth - ctx.measureText(text[i]).width
			lastSubStrIndex = i;
			dotCount++
		}
		if(textWidth > maxWidtth && !count) {
			count++
			ctx.fillText(' ...', x + addDotTextWidth, y);
		}
		if(i === text.length - 1){
			ctx.fillText(text.substring(0,count ? lastSubStrIndex : text.length), x, y);
		}
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

刘家军

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

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

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

打赏作者

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

抵扣说明:

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

余额充值