1.新建一个js文件
//处理文字多出省略号显示
export function dealWords(options) {
options.ctx.setFontSize(options.fontSize);//设置字体大小
var allRow = Math.ceil(options.ctx.measureText(options.word).width / options.maxWidth);//实际总共能分多少行
var count = allRow >= options.maxLine ? options.maxLine : allRow;//实际能分多少行与设置的最大显示行数比,谁小就用谁做循环次数
var endPos = 0;//当前字符串的截断点
for (var j = 0; j < count; j++) {
var nowStr = options.word.slice(endPos);//当前剩余的字符串
var rowWid = 0;//每一行当前宽度
if (options.ctx.measureText(nowStr).width > options.maxWidth) {//如果当前的字符串宽度大于最大宽度,然后开始截取
for (var m = 0; m < nowStr.length; m++) {
rowWid += options.ctx.measureText(nowStr[m]).width;//当前字符串总宽度
if (rowWid > options.maxWidth) {
if (j === options.maxLine - 1) { //如果是最后一行
options.ctx.fillText(nowStr.slice(0, m - 1) + '...', options.x, options.y + (j + 1) * 18); //(j+1)*18这是每一行的高度
} else {
options.ctx.fillText(nowStr.slice(0, m), options.x, options.y + (j + 1) * 18);
}
endPos += m;//下次截断点
break;
}
}
} else {//如果当前的字符串宽度小于最大宽度就直接输出
options.ctx.fillText(nowStr.slice(0), options.x, options.y + (j + 1) * 18);
}
}
}
export default {
dealWords
}
2.在main.js中引入并挂载在vue中
import canvasClit from "@/utils/clitcanvas.js"
Vue.prototype.$canvasClit = canvasClit
3.在页面中使用
let that = this
// 处理微信名称超过一行显示三个点
that.$canvasClit.dealWords({
ctx: ctx, //画布上下文
fontSize: 14, //字体大小
word: truename, //需要处理的文字
maxWidth: 150, //一行文字最大宽度
x: 110, //文字在x轴要显示的位置
y: 50, //文字在y轴要显示的位置
maxLine: 1, //文字最多显示的行数
});