Vue2+ElementUI实现横向轮播的柱状图

1、效果图,截图是静态的,其实是动态轮播的效果

2、template代码

<template>
  <div class="main" id="bar"></div>
</template>

3、script代码

<script>
import * as echarts from "echarts";
import axios from "axios";

export default {
  data() {
    return {
      myChart: null,
      barChartData: [],
      // 柱状图轮播参数配置
      startValue: 0,
      endValue: 5,
      timeId: null
    };
  },
  created() {},
  mounted() {
    this.getData();
    this.startInterval();
  },
  watch: {
    // 监听barChartData的变化
    barChartData: {
      handler(newVal, oldVal) {
        // 当barChartData变化时,重新初始化echarts图表
        this.initBarEcharts();
      },
      deep: true, // 如果数据是对象或数组,使用deep选项来深度监听
    },
    startValue: {
      handler(newVal, oldVal) {
        this.initBarEcharts();
      },
      deep: true,
    },
    endValue: {
      handler(newVal, oldVal) {
        this.initBarEcharts();
      },
      deep: true,
    },
  },
  methods: {
    // 获取支部缴费数据
    getData() {
      const res = axios.get("你的请求地址");
      res.then((response) => {
        this.barChartData = response.data
        //排序:可以实现从大到小的排序
        // this.barChartData.sort((a, b) => {
        //   return b.value - a.value;
        // })
      });
      // 异步操作失败时,执行的回调函数
      res.catch((error) => {
        console.log("请求失败:");
        console.log("error", error);
        console.log("请求失败响应对象获取", error.response);
      });
    },

    // 初始化柱状图
    initBarEcharts() {
      let that = this;
      // 获取x轴与y轴数据
      // 横坐标数据
      const valueX = that.barChartData.map((item) => {
        return item.value;
      });
      // 纵坐标数据
      const valueY = that.barChartData.map((item) => {
        return item.name;
      });
      this.myChart = echarts.init(document.getElementById("bar"));
      const option = {
        // 鼠标划过时显示数据
        tooltip: {
          trigger: "item", // 鼠标悬停时触发
          formatter: function (params) {
            // 这里的 params 是当前鼠标悬停的数据项的详细信息
            return `${params.name}: ${params.value}元`; // 显示系列名称和数据值
          },
        },
        textStyle: {
          fontSize: 14,
          fontStyle: "normal",
          fontWeight: "bold",
        },
        grid: {
          top: "5%",
          left: "5%",
          right: "10%",
          bottom: "10%",
          containLabel: true,
        },
        xAxis: {
          type: "value",
          axisLabel: { show: false }, // 隐藏 x 轴刻度标签
          axisTick: { show: false }, // 隐藏 x 轴刻度
          // 隐藏 x 轴分割线
          splitLine: {
            show: false,
          }, 
        },
        yAxis: {
          inverse: true, //根据自己的情况是否选择数组数据倒置排序
          type: "category",
          data: valueY,
          axisLine: {
            show: true,
            lineStyle: {
              color: "#fff",
            },
          },
          axisTick: {
            show: false, // 隐藏 y 轴的刻度
          },
        },
        series: [
          {
            inverse: true,//根据自己的情况是否选择数组数据倒置排序
            type: "bar",
            data: valueX,
            // 柱状的颜色
            itemStyle: {
              color: function (params) {
                // 构建渐变色对象
                var colorLeft = "#326bf2"; // 左侧颜色
                var colorRight = "#43fec4"; // 右侧颜色
                var color = new echarts.graphic.LinearGradient(0, 0, 1, 0, [
                  { offset: 0, color: colorLeft },
                  { offset: 1, color: colorRight },
                ]);
                return color;
              },
              //设置柱子圆角
              borderRadius: [0, 20, 20, 0],
            },
            showBackground: true,
            backgroundStyle: {
              color: "#1c3040",
            },
            // 柱状的粗细
            barWidth: 10,
            label: {
              normal: {
                show: true,
                position: "right",
                // offset: [50, 0],
                formatter: "{c}元", // 标签内容格式器,{c} 表示系列数据的数值
                color: "#fff",
                fontSize: 14,
              },
            },
          },
        ],
        dataZoom: [
          {
            // 这部分是滚动条
            yAxisIndex: 0, //这里是从y轴的0刻度开始
            show: false, //是否显示滑动条,本次需求中,设置为false
            type: "inside", // 类型:内置型数据区域缩放组件
            startValue: that.startValue, // 从头开始
            endValue: that.endValue, // 一次性展示几个
            zoomOnMouseWheel: false, // 开启滚轮缩放
            moveOnMouseWheel: false, // 开启滚轮平移
          },
        ],
      };
      this.myChart.setOption(option);
      window.addEventListener("resize", function () {
        this.myChart.resize();
      });
    },
    // 设置柱状图轮播效果
    startInterval() {
      if (this.timeId) {
        clearInterval(this.timeId);
      }
      this.timeId = setInterval(() => {
        //设置循环,延时3s
        if (this.endValue > this.barChartData.length - 1) {
          (this.startValue = 0), (this.endValue = 5);
        } else {
          this.startValue++;
          this.endValue++;
        }
        if (this.myChart == null) {
          this.initBarEcharts();
        }
      }, 4000);
    },
  },
};
</script>

重点是dataZoom的设置与startInterval()方法,不过不要忘记watch监听数据的变化,否则达不到想要的轮播效果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值