Echarts横向柱状图title左对齐,超出隐藏鼠标悬浮,宽度自适应

1.左对齐,超出隐藏显示...

超出固定长度截取。

      yAxis: {
        type: 'category',
        triggerEvent: true,
        axisLine: { show: false },
        axisTick: { show: false },
        splitLine: { show: false },
        axisLabel: {
          formatter: function (value, index) {
            if (value.length > 10) {
              value = value.substring(0, 10) + "...";
            }
            return '{text|' + value + '}';
          },
          margin: leftWidth,
          width: leftWidth,
          align: 'left',
          padding: 0,
          rich: {
            text: {
              fontSize: '12px',
            },
          }
        },
        data: yAxisData,
      }

2.鼠标悬浮显示全部

// 处理y轴title鼠标悬浮
  const extensionOne = (chart, data) => {
    // 注意这里,是以X轴显示内容过长为例,如果是x轴的话,需要把params.componentType == 'xAxis'改为yAxis
    // 判断是否创建过div框,如果创建过就不再创建了
    // 该div用来盛放文本显示内容的,方便对其悬浮位置进行处理
    var elementDiv = document.getElementById('extension');
    if (!elementDiv) {
      var div = document.createElement('div');
      div.setAttribute('id', 'extension');
      div.style.display = 'block';
      document.querySelector('html').appendChild(div);
    }
    chart.on('mouseover', function (params) {
      // console.log('params:', data,params.dataIndex);
      if (params.componentType == 'yAxis') {
        var elementDiv = document.querySelector('#extension');
        //设置悬浮文本的位置以及样式
        var elementStyle =
          'position: absolute;z-index: 99999;color: #fff;font-size: 12px;padding: 5px;display: inline;border-radius: 4px;background-color: #303133;box-shadow: rgba(0, 0, 0, 0.3) 2px 2px 8px';
        elementDiv.style.cssText = elementStyle;
        elementDiv.innerHTML = params.value;
        document.querySelector('html').onmousemove = function (event) {
          var elementDiv = document.querySelector('#extension')
          var xx = event.pageX - 10;
          var yy = event.pageY + 15;
          elementDiv.style.top = yy + 'px';
          elementDiv.style.left = xx + 'px';
        }
      }
    })
    chart.on('mouseout', function (params) {
      //注意这里,我是以X轴显示内容过长为例,如果是y轴的话,需要改为yAxis
      if (params.componentType == 'yAxis') {
        var elementDiv = document.querySelector('#extension');
        elementDiv.style.cssText = 'display:none';
      }
    })
  };
//初始化echarts实例
var chart = echarts.init(document.getElementById('charts'));
// 将echarts实例和数据data传入方法中 
extensionOne(chart,data); // 

 3.宽度自适应,手动计算字符串宽度

  // 处理字符串的长度
  const countChineseCharacters = (str) => {
    const pattern = /[\u4e00-\u9fa5]/g; // 匹配中文字符的正则表达式
    const matches = str.match(pattern); // 使用 match() 方法找出所有匹配项
    let cnLength = matches ? matches.length : 0;
    if(str.includes('...')){
      return cnLength * 12 + (str?.length - cnLength) * 8
    }else{
      return cnLength * 12 + (str?.length - cnLength) * 8 + 16
    }
  }

  // 计算出图表距离左边的宽度
  const calculativeWidth = (data) => {
    let leftWidthArr = [];
    data.forEach(item => {
      leftWidthArr.push(countChineseCharacters(item.name))
    })
    return leftWidthArr.sort((a, b) => b - a)[0];
  }
  // 拿到最长的title的宽度
  const leftWidth = calculativeWidth(data);
    // 配置项
  option = {
      grid: {
        left: -leftWidth + 40,
        right: 50,
        bottom: '3%',
        top: '0',
        containLabel: true    
      }
  },

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值