使用echarts湖北省地圖

下載echarts

npm install echarts --save-dev

在main.js中全局引入

import echarts from 'echarts'

Vue.prototype.$echarts = echarts

引入湖北省地圖文件、自動輪播js

import hubei from "./hubei.js";

require("./echarts-auto-tooltip")

<template>

  <div>

    <div id="chart"></div>

  </div>

</template>

 

<script>

// import china from "./china.js";

import hubei from "./hubei.js";

require("./echarts-auto-tooltip")

 

export default {

  data() {

    return {

      option: {

        backgroundColor: "#404a59",

        title: {

          show: true,

          text: "主標題",

          subtext: "點擊跳轉",

          sublink: "http://www.baidu.com",

          left: "center"

        },

        tooltip: {

          show: true,

          padding: 10,

          alwaysShowContent: true, // 是否永遠顯示tooltip

          enterable: true,

          transitionDuration: 1.5, // 移動動畫時間,單位s

          trigger: "item",

          textStyle: {

            color: "#fff"

          },

          formatter: "{b} </br> {c}",

          extraCssText:"width:300px; height:150px; background:#333; color:#999; border-radius:15px;"

        },

        //地理座標系組件用於地圖的繪製,支持在地理座標系上繪製散點圖,線集。

        //要顯示散點圖,必須填寫這個配置

        geo: {

          show: true,

          roam: false, //是否允許鼠標滾動放大,縮小

          map: "湖北",

          label: {

            //圖形上的文本標籤,可用於說明圖形的一些數據信息

            show: false, //是否顯示文本

            color: "#fff" //文本顏色

          },

          itemStyle: {

            //地圖區域的多邊形 圖形樣式。 默認樣試。

            areaColor: "#323c48", //地圖區域的顏色。

            borderColor: "#111" //邊框線

          },

          emphasis: {

            //高亮狀態下的多邊形和標籤樣式。

            label: {

              //文本

              show: false,

              color: "#ADA"

            },

            itemStyle: {

              //區域

              areaColor: "#F60"

            }

          },

          data: [

            { name: "十堰市", value: 222 },

            { name: "神農架林區", value: 222 },

            {

              name: "恩施土家族苗族自治州",

              value: 222

            },

            { name: "宜昌市", value: 222 },

            { name: "襄陽市", value: 222 },

            { name: "荊門市", value: 222 },

            { name: "荊州市", value: 222 },

            { name: "潛江市", value: 222 },

            { name: "天門市", value: 222 },

            { name: "仙桃市", value: 222 },

            { name: "隨州市", value: 222 },

            { name: "孝感市", value: 222 },

            { name: "咸寧市", value: 222 },

            { name: "武漢市", value: 222 },

            { name: "黃岡市", value: 222 },

            { name: "黃石市", value: 222 }

          ]

        },

        //是視覺映射組件,用於進行『視覺編碼』,也就是將數據映射到視覺元素(視覺通道)。

        visualMap: {

          min: 0, //最小值

          max: 600, //最大值

          show: false,

          calculable: true, //是否顯示拖拽用的手柄(手柄能拖拽調整選中範圍)。

          inRange: {

            color: ["#ccc", "yellow", "#fff"] //顏色

          },

          textStyle: {

            color: "#fff"

          }

        },

        series: [

          {

            type: "effectScatter", //特效散點圖

            silent: false,// 圖形是否觸發鼠標事件

            coordinateSystem: "geo", //該系列使用的座標系

            data: [

              //數據

              { name: "宜昌", value: [111.290843, 30.702636, 600] },

              { name: "孝感市 ", value: [113.926655, 30.926423, 200] },

              { name: "十堰市 ", value: [110.787916, 32.646907, 100] },

              { name: "荊門市 ", value: [112.204251, 31.03542, 150] },

              { name: "仙桃市 ", value: [113.453974, 30.364953, 350] }

            ],

            label: {

              normal: {

                formatter: "{b}",

                position: "right",

                show: true

              }

            },

            //標記的大小,可以設置數組或者函數返回值的形式

            symbolSize: function(val) {

              return val[2] / 25;

            },

            rippleEffect: {

              //漣漪特效相關配置。

              brushType: "fill" // 波紋繪製方式 stroke, fill

            },

            hoverAnimation: true //鼠標移入放大圓

          }

        ]

      }

    };

  },

  mounted() {

    this.mYChart();

  },

  methods: {

    mYChart() {

      var mapChart = this.$echarts.init(document.getElementById("chart"));

      mapChart.setOption(this.option)

      // 自動輪播

      tools.loopShowTooltip(mapChart, this.option, {loopSeries: true});

    }

  }

};

</script>

 

<style scoped>

.box {

  margin-top: 30px;

}

#chart {

  width: 1000px;

  height: 620px;

  

}

</style>

echarts-auto-tooltip.js代碼

(function (global) {

    global.tools = global.tools || {};

 

    /**

     *  echarts tooltip 自動輪播

     *  @author liuyishi

     *  @param chart

     *  @param chartOption

     *  @param options

     *  {

     *  interval    輪播時間間隔,單位毫秒,默認爲2000

     *  loopSeries  boolean類型,默認爲false。

     *              true表示循環所有series的tooltip,false則顯示指定seriesIndex的tooltip

     *  seriesIndex 默認爲0,指定某個系列(option中的series索引)循環顯示tooltip,

     *              當loopSeries爲true時,從seriesIndex系列開始執行.

     *  }

     * @returns {{clearLoop: clearLoop}}

     */

 

    tools.loopShowTooltip = function (chart, chartOption, options) {

        var defaultOptions = {

            interval: 5000,

            loopSeries: false,

            seriesIndex: 0,

            updateData: null

        };

 

        if (!chart || !chartOption) {

            return {};

        }

 

        var dataIndex = 0; // 數據索引,初始化爲-1,是爲了判斷是否是第一次執行

        var seriesIndex = 0; // 系列索引

        var timeTicket = 0;

        var seriesLen = chartOption.series.length; // 系列個數

        function(){ //xm返傭 http://www.xmchinese.cn/

        var dataLen = 0; // 某個系列數據個數

        var chartType; // 系列類型

        var first = true;

 

        // 不循環series時seriesIndex指定顯示tooltip的系列,不指定默認爲0,指定多個則默認爲第一個

        // 循環series時seriesIndex指定循環的series,不指定則從0開始循環所有series,指定單個則相當於不循環,指定多個

        // 要不要添加開始series索引和開始的data索引?

 

        if (options) {

            options.interval = options.interval || defaultOptions.interval;

            options.loopSeries = options.loopSeries || defaultOptions.loopSeries;

            options.seriesIndex = options.seriesIndex || defaultOptions.seriesIndex;

            options.updateData = options.updateData || defaultOptions.updateData;

        } else {

            options = defaultOptions;

        }

 

        // 如果設置的seriesIndex無效,則默認爲0

        if (options.seriesIndex < 0 || options.seriesIndex >= seriesLen) {

            seriesIndex = 0;

        } else {

            seriesIndex = options.seriesIndex;

        }

 

        function autoShowTip() {

            function showTip() {

                // 判斷是否更新數據

                if (dataIndex === 0 && !first && typeof options.updateData === "function") {

                    options.updateData();

                    chart.setOption(chartOption);

                }

 

                var series = chartOption.series;

                chartType = series[seriesIndex].type; // 系列類型

                dataLen = series[seriesIndex].data.length; // 某個系列的數據個數

 

                var tipParams = { seriesIndex: seriesIndex };

                switch (chartType) {

                    case 'map':

                    case 'pie':

                    case 'chord':

                        tipParams.name = series[seriesIndex].data[dataIndex].name;

                        break;

                    case 'radar': // 雷達圖

                        tipParams.seriesIndex = seriesIndex;

                        tipParams.dataIndex = dataIndex;

                        break;

                    default:

                        tipParams.dataIndex = dataIndex;

                        break;

                }

 

                if (chartType === 'pie' || chartType === 'radar') {

                    // 取消之前高亮的圖形

                    chart.dispatchAction({

                        type: 'downplay',

                        seriesIndex: options.loopSeries ? (seriesIndex === 0 ? seriesLen - 1 : seriesIndex - 1) : seriesIndex,

                        dataIndex: dataIndex === 0 ? dataLen - 1 : dataIndex - 1

                    });

 

                    // 高亮當前圖形

                    chart.dispatchAction({

                        type: 'highlight',

                        seriesIndex: seriesIndex,

                        dataIndex: dataIndex

                    });

                }

 

                // 顯示 tooltip

                tipParams.type = 'showTip';

                chart.dispatchAction(tipParams);

 

                dataIndex = (dataIndex + 1) % dataLen;

                if (options.loopSeries && dataIndex === 0 && !first) { // 數據索引歸0表示當前系列數據已經循環完

                    seriesIndex = (seriesIndex + 1) % seriesLen;

                }

 

                first = false;

            }

 

            showTip();

            timeTicket = setInterval(showTip, options.interval);

        }

 

        // 關閉輪播

        function stopAutoShow() {

            if (timeTicket) {

                clearInterval(timeTicket);

                timeTicket = 0;

 

                if (chartType === 'pie' || chartType === 'radar') {

                    // 取消高亮的圖形

                    chart.dispatchAction({

                        type: 'downplay',

                        seriesIndex: options.loopSeries ? (seriesIndex === 0 ? seriesLen - 1 : seriesIndex - 1) : seriesIndex,

                        dataIndex: dataIndex === 0 ? dataLen - 1 : dataIndex - 1

                    });

                }

            }

        }

 

        var zRender = chart.getZr();

 

        function zRenderMouseMove(param) {

            if (param.event) {

                // 阻止canvas上的鼠標移動事件冒泡

                param.event.cancelBubble = true;

            }

 

            stopAutoShow();

        }

 

        // 離開echarts圖時恢復自動輪播

        function zRenderGlobalOut() {

            if (!timeTicket) {

                autoShowTip();

            }

        }

 

        // 鼠標在echarts圖上時停止輪播

        chart.on('mousemove', stopAutoShow);

        zRender.on('mousemove', zRenderMouseMove);

        zRender.on('globalout', zRenderGlobalOut);

 

        autoShowTip();

 

        return {

            clearLoop: function () {

                if (timeTicket) {

                    clearInterval(timeTicket);

                    timeTicket = 0;

                }

 

                chart.off('mousemove', stopAutoShow);

                zRender.off('mousemove', zRenderMouseMove);

                zRender.off('globalout', zRenderGlobalOut);

            }

        };

    };

})(window);

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章