vue echarts y轴文本过长,设置超出隐藏,然后显示省略号,并且鼠标悬浮上之后显示全部

  1. 效果图
    在这里插入图片描述
<template>
  <div>
    <!-- 生态流量报警:echarts图2:柱状图 -->
    <div id="main-barChart"></div>
  </div>
</template>

<script>
export default {
  props: {
    //表单禁用
    statistics: {
      type: Object,
      default() {
        return {}
      }
    }
  },
  data() {
    return {}
  },
  watch: {
    statistics(val) {
      console.log('wacth3', val.hename)
      if (val) {
        this.initCharts()
      }
    }
  },
  methods: {
    initCharts() {
      // 初始化echarts实例
      var myChart = this.$echarts.init(document.getElementById('main-barChart'))
      const henameList = this.statistics.hename.map(item => item.hename)
      const henameSums = this.statistics.hename.map(item => item.sums)
      console.log(henameList, henameSums)
      var data = henameSums
      var className = henameList
      var colorList = ['#FF6600', '#FAC450', '#F7A729', '#00B050', '#0a7c3d']
      // var defaultData=[100,100,100,100,100];最多次数
      // 绘制图表
      var option = {
        title: {
          left: 'left',
          top: '2%',
          text: '单站报警TOP5',
          textStyle: {
            fontWeight: 'bold',
            color: '#535353',
            fontSize: 18,
            fontFamily: 'Microsoft YaHei'
          }
        },
        grid: {
          left: '5%',
          right: '5%',
          bottom: '-2%',
          top: '13%',
          containLabel: true
        },
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'none'
          }
          // formatter: function (params) {
          //   return (
          //     params[0].name +
          //     '<br/>' +
          //     "<span style='display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:rgba(36,207,233,0.9)'></span>" +
          //     // params[0].seriesName + ' : ' + Number((params[0].value.toFixed(4) / 10000).toFixed(2)).toLocaleString() + ' <br/>'
          //     params[0].seriesName +
          //     ' : ' +
          //     params[0].value
          //   )
          // }
        },

        xAxis: {
          show: false,
          type: 'value'
        },
        yAxis: [
          {
            type: 'category',
            inverse: true,
            // y轴显示不全,鼠标移上去显示全部,记得加上这个
            triggerEvent: true,
            axisLabel: {
              show: true,
              textStyle: {
                color: '#5A5E66'
              },
              //显示省略号操作(第一步)
              formatter: function (value) {
                var val = ''
                if (value.length > 5) {
                  val = value.substr(0, 5) + '...'
                  return val
                } else {
                  return value
                }
              }
            },
            splitLine: {
              show: false
            },
            axisTick: {
              show: false
            },
            axisLine: {
              show: false
            },
            data: className
          },
          {
            type: 'category',
            inverse: true,
            axisTick: 'none',
            axisLine: 'none',
            show: true,
            axisLabel: {
              textStyle: {
                color: '#5A5E66',
                fontSize: '12',
                fontFamily: 'Microsoft YaHei',
                fontWeight: 'bold'
              },
              formatter: function (value) {
                return value + ' 次'
              }
            },
            data: data
          }
        ],
        series: [
          {
            name: '报警次数',
            type: 'bar',
            zlevel: 1,
            itemStyle: {
              normal: {
                barBorderRadius: 0,
                // color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
                //     offset: 0,
                //     color: 'rgb(57,89,255,1)'
                // }, {
                //     offset: 1,
                //     color: 'rgb(46,200,207,1)'
                // }]),
                color: params => {
                  return colorList[params.dataIndex]
                }
              }
            },
            barWidth: 18,

            data: data
          },
          {
            name: '背景',
            type: 'bar',
            barWidth: 18,
            barGap: '-120%',
            /*多个并排柱子设置柱子之间的间距*/
            // data: defaultData,
            itemStyle: {
              normal: {
                color: 'transparent',
                barBorderRadius: 0
              }
            }
          }
        ]
      }

      myChart.setOption(option)

      // 页面监控宽度的变化
      window.addEventListener('resize', function () {
        myChart.resize()
      })

      // 就是这个方法,解决y轴鼠标放上提示全部内容
      extension(myChart)
      function extension(myChart) {
        // 注意这里,是以X轴显示内容过长为例,如果是y轴的话,需要把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)
        }
        myChart.on('mouseover', function (params) {
          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'
            }
          }
        })
        myChart.on('mouseout', function (params) {
          //注意这里,我是以X轴显示内容过长为例,如果是y轴的话,需要改为yAxis
          if (params.componentType == 'yAxis') {
            var elementDiv = document.querySelector('#extension')

            elementDiv.style.cssText = 'display:none'
          }
        })
      }
    }
  }
}
</script>

<style lang="less" scoped>
#main-barChart {
  width: 100%;
  height: 280px;
}
</style>

  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Vue中使用echarts,你可以通过全局引入或按需引入的方式来使用echarts库。全局引入的方法是在main.js文件中引入echarts,并将其挂载在Vue的原型上,以便在整个项目中可以直接通过this.$echarts来使用echarts库。具体代码如下: ```javascript // main.js import echarts from "echarts"; Vue.prototype.$echarts = echarts; ``` 这样,在Vue的组件中就可以通过this.$echarts来调用echarts库的各种功能了。比如你可以在组件的mounted钩子函数中使用this.$echarts来初始化一个echarts实例,并使用其提供的API来绘制图表。 另外,如果你只需要使用一部分echarts功能,你也可以按需引入echarts的模块。具体的使用方法可以参考echarts官方文档或者其他相关资源。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vue使用echarts(完整版,解决各种报错)](https://blog.csdn.net/geidongdong/article/details/122561517)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [在vue中使用Echart图表。小白篇](https://blog.csdn.net/qq_43153895/article/details/108214450)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ciito

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

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

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

打赏作者

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

抵扣说明:

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

余额充值