echarts组件封装完整版

<template>
    <div :id="id" :style="style"></div>
</template>

<script>
import * as echarts from 'echarts';
export default {
    name: 'charts',
    props: {
        // id名
        id: {
            type: String
        },
        // 宽度
        width: {
            type: String,
            default: '100%'
        },
        // 高度
        height: {
            type: String,
            default: '100%'
        },
        // 数据
        option: {
            type: Object
        },
        // 是否开启轮播
        carousel: {
            type: Boolean,
            default: false
        }
    },
    data() {
        return {
            chart: null,
            timer: 0
        };
    },
    computed: {
        style() {
            return {
                width: this.width,
                height: this.height
            };
        }
    },
    watch: {
        option: {
            handler(newVal, oldVal) {
                if (this.chart) {
                    this.chart.setOption(newVal);
                } else {
                    this.initChart();
                }
            },
            deep: true
        }
    },
    mounted() {
        this.$nextTick(() => {
            this.initChart();
            // 是否开启自动轮播
            if (this.carousel) {
                this.getVoluntarily();
            }
        });
    },
    beforeDestroy() {
        if (!this.chart) {
            return;
        }
        this.chart.dispose();
        this.chart = null;
        clearInterval(this.timer);
    },
    methods: {
        initChart() {
            this.chart = echarts.init(document.getElementById(this.id));
            this.chart.setOption(this.option);
            window.addEventListener('resize', this.chart.resize);
        },
        getVoluntarily() {
            const _length = this.chart.getOption().series[0].data.length;
            let count = 0;
            this.timer = setInterval(() => {
                this.chart.dispatchAction({
                    type: 'showTip', // 提示框
                    seriesIndex: 0,
                    dataIndex: count // 第几行柱子高亮
                });
                this.chart.dispatchAction({
                    type: 'downplay',
                    seriesIndex: 0,
                    dataIndex: count - 1
                });
                this.chart.dispatchAction({
                    type: 'highlight',
                    seriesIndex: 0,
                    dataIndex: count
                });
                if (_length === count) {
                    count = 0;
                } else {
                    count++;
                }
            }, 3000);
        }
    }
};
</script>

在页面中引用

<ChartsPart :id="id" :height="height" :option="option" carousel='true'/>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值