多行截断新方案-canvas-measureText

最近发现一个多行截断好用的方案,很好适配移动端

思路是通过canvas的measureText来计算文字长度,然后按照行数进行宽度裁剪

字号要按照展示的去设置,否则裁剪不准确

computed: {
    comutedWidth () {
      return function (val) {
        // 多行截断,通过canvas的measureText来测量文字总长度,超出的部分截掉
        var canvas = document.createElement('canvas');
        var ctx = canvas.getContext('2d');
        ctx.font = '16px Arial';
        var char;
        var tempWidth = 0;
        var componentWidth = 518;// 根据文字父元素的宽度,乘以行数,计算出规定的宽度
        var splitString = '';
        for (let i = 0; i < val.length; i++) {
          char = val[i];
          let charWidth = ctx.measureText(char).width;
          if (char === ' ') { // 空格的宽度量的有些窄了,手动处理一下
            charWidth = 8;
          }
          tempWidth = tempWidth + charWidth; // 累加的文本长度
          // 累加的文字长度超过行数规定的长度后进行裁剪
          if ((tempWidth > componentWidth) && !splitString) {
            splitString = val.substring(0, i) + '...';
          }
        }
        return splitString;
      };
    }
  },

dom里直接调用

<div>{
    
    {comutedWidth(content)}}</div>

猜你喜欢

转载自blog.csdn.net/qq_38068508/article/details/129306398