echart,3d pie, switch等,radio和checkbox重写

echart 柱状图bar渐变金属效果

{
  backgroundColor:"#000a3f",
    tooltip: {
        trigger: "item",
    },
    grid: {
        left: "5%",
        top: "10%",
        right: "5%",
        bottom: "10%",
    },
    legend: {
        show: true,
        icon: "circle",
        orient: "horizontal", //横向排列
        top: "90.5%",
        right: "center",
        itemWidth: 16.5,
        itemHeight: 6,
        // itemGap: 30,
        textStyle: {
        // color: '#FFFFFF'
        color: "#C9C8CD",
        fontSize: 14,
        },
    },
    xAxis: [
        {
        data: [
            "监测中心站",
            "调查中心",
            "核与辐射安全中心",
            "宣传教育中心",
        ],
        axisLabel: {
            textStyle: {
            color: "#38455D",
            fontSize: 12,
            },
            margin: 30, //刻度标签与轴线之间的距离。
        },

        axisLine: {
            show: true, //不显示x轴
            lineStyle: {
            color: "#E2E8EC",
            },
        },
        axisTick: {
            show: false, //不显示刻度
        },
        boundaryGap: true,
        splitLine: {
            show: false,
            width: 0.08,
            lineStyle: {
            type: "solid",
            color: "#03202E",
            },
        },
        },
    ],
    yAxis: [
        {
        splitLine: {
            show: true,
            lineStyle: {
            color: "#E2E8EC",
            type: "dashed",
            },
        },
        axisTick: {
            show: false,
        },
        axisLine: {
            show: true,
            lineStyle: {
            color: "#E2E8EC",
            },
        },
        axisLabel: {
            textStyle: {
            color: "#38455D",
            fontSize: 12,
            },
        },
        },
    ],
    series: [
        {
        //柱底圆片
        name: "",
        type: "pictorialBar",
        symbolSize: [60, 20], //调整截面形状
        symbolOffset: [0, 10],
        z: 12,
        itemStyle: {
            normal: {
            color: {
                x: 0,
                y: 0,
                x2: 1,
                y2: 0,
                type: "linear",
                global: false,
                colorStops: [
                {
                    offset: 0,
                    color: "#D6BE2B",
                },
                {
                    offset: 0.25,
                    color: "#FAEB1C",
                },
                {
                    offset: 0.5,
                    color: "#F7D116",
                },
                {
                    offset: 0.75,
                    color: "#DAB21C",
                },
                {
                    offset: 1,
                    color: "#E0C424",
                },
                ],
            },
            },
        },
        data: ["50", "75", "105", "130"],
        },

        //柱体
        {
        name: "",
        type: "bar",
        barWidth: 60,
        barGap: "0%",
        itemStyle: {
            normal: {
            color: {
                x: 0,
                y: 0,
                x2: 1,
                y2: 0,
                type: "linear",
                global: false,
                colorStops: [
                {
                    offset: 0,
                    color: "#D6BE2B",
                },
                {
                    offset: 0.25,
                    color: "#FAEB1C",
                },
                {
                    offset: 0.5,
                    color: "#F7D116",
                },
                {
                    offset: 0.75,
                    color: "#DAB21C",
                },
                {
                    offset: 1,
                    color: "#E0C424",
                },
                ],
            },
            },
        },

        data: ["50", "75", "105", "130"],
        },

        //柱顶圆片
        {
        name: "",
        type: "pictorialBar",
        symbolSize: [60, 20], //调整截面形状
        symbolOffset: [0, -10],
        z: 12,
        symbolPosition: "end",
        itemStyle: {
            normal: {
            color: {
                x: 0,
                y: 0,
                x2: 1,
                y2: 0,
                type: "linear",
                global: false,
                colorStops: [
                {
                    offset: 0,
                    color: "#D6BE2B",
                },
                {
                    offset: 0.25,
                    color: "#FAEB1C",
                },
                {
                    offset: 0.5,
                    color: "#F7D116",
                },
                {
                    offset: 0.75,
                    color: "#DAB21C",
                },
                {
                    offset: 1,
                    color: "#E0C424",
                },
                ],
            },
            },
        },
        data: ["50", "75", "105", "130"],
        },
    ],
}

在这里插入图片描述
参考: https://www.isqqw.com/echartsdetail?id=16616

3D饼图

<template>
  <div ref="chartBox" style="height: 100%; width: 100%"></div>
</template>

<script>
import labelBg from '../img/decy.png';
import * as echarts from "echarts";
import "echarts-gl";
export default {
  data() {
    return {
      labelBg
    }
  },
  mounted() {
    this.myChart = echarts.init(this.$refs.chartBox);
    this.setChartOption();
  },
  methods: {
    setChartOption(data = []) {
      data = [
        {
          name: "林地面积统计",
          value: 10000,
          itemStyle: {
            // color: "#22c4ff",
            color: 'rgba(68,94,205, 0.5)'
          },
        },
        {
          name: "草地面积统计",
          value: 12116,
          itemStyle: {
            // color: "#aaff00",
            color: 'rgba(73,156,186, 0.5)'
          },
        },
        {
          name: "耕地地面积统计",
          value: 16616,
          itemStyle: {
            // color: "#ffaaff",
            color: 'rgba(203,152,76,0.5)'
          },
        },
      ];
      let option = this.getPie3D(data, 0.8);
      option.series.push({
        name: "pie2d",
        type: "pie",
        labelLine: {
          length: 60,
          length2: 80,
        },
        startAngle: -20, //起始角度,支持范围[0, 360]。
        clockwise: false, //饼图的扇区是否是顺时针排布。上述这两项配置主要是为了对齐3d的样式
        radius: ["20%", "50%"],
        center: ["50%", "50%"],
        data: data,
        itemStyle: {
          opacity: 0,
        },
      });
      this.myChart.setOption(option);
    },
    getPie3D(pieData, internalDiameterRatio) {
      //internalDiameterRatio:透明的空心占比
      let that = this;
      let series = [];
      let sumValue = 0;
      let startValue = 0;
      let endValue = 0;
      let legendData = [];
      let legendBfb = [];
      let k = 1 - internalDiameterRatio;
      pieData.sort((a, b) => {
        return b.value - a.value;
      });
      // 为每一个饼图数据,生成一个 series-surface 配置
      for (let i = 0; i < pieData.length; i++) {
        sumValue += pieData[i].value;
        let seriesItem = {
          name:
            typeof pieData[i].name === "undefined"
              ? `series${i}`
              : pieData[i].name,
          type: "surface",
          parametric: true,
          wireframe: {
            show: false,
          },
          pieData: pieData[i],
          pieStatus: {
            selected: false,
            hovered: false,
            k: k,
          },
          center: ["10%", "50%"],
        };

        if (typeof pieData[i].itemStyle != "undefined") {
          let itemStyle = {};
          typeof pieData[i].itemStyle.color != "undefined"
            ? (itemStyle.color = pieData[i].itemStyle.color)
            : null;
          typeof pieData[i].itemStyle.opacity != "undefined"
            ? (itemStyle.opacity = pieData[i].itemStyle.opacity)
            : null;
          seriesItem.itemStyle = itemStyle;
        }
        series.push(seriesItem);
      }

      // 使用上一次遍历时,计算出的数据和 sumValue,调用 getParametricEquation 函数,
      // 向每个 series-surface 传入不同的参数方程 series-surface.parametricEquation,也就是实现每一个扇形。
      legendData = [];
      legendBfb = [];
      for (let i = 0; i < series.length; i++) {
        endValue = startValue + series[i].pieData.value;
        series[i].pieData.startRatio = startValue / sumValue;
        series[i].pieData.endRatio = endValue / sumValue;
        series[i].parametricEquation = this.getParametricEquation(
          series[i].pieData.startRatio,
          series[i].pieData.endRatio,
          false,
          false,
          k,
          series[i].pieData.value
        );
        startValue = endValue;
        let bfb = that.fomatFloat(series[i].pieData.value / sumValue, 4);
        legendData.push({
          name: series[i].name,
          value: bfb,
        });
        legendBfb.push({
          name: series[i].name,
          value: bfb,
        });
      }
      let boxHeight = this.getHeight3D(series, 26); //通过传参设定3d饼/环的高度,26代表26px
      // 准备待返回的配置项,把准备好的 legendData、series 传入。
      let option = {
        legend: {
          data: legendData,
          orient: "horizontal",
          left: 10,
          top: 10,
          itemGap: 10,
          textStyle: {
            color: "#A1E2FF",
          },
          show: true,
          icon: "circle",
          formatter: function (param) {
            let item = legendBfb.filter((item) => item.name == param)[0];
            let bfs = that.fomatFloat(item.value * 100, 2) + "%";
            return `${item.name}  ${bfs}`;
          },
        },
        // labelLine: {
        //   show: true,
        //   lineStyle: {
        //     color: "#7BC0CB",
        //   },
        // },
        // labelLine: {
        //   normal: {
        //     lineStyle: {
        //       color: '#00fff6'
        //     },
        //   }
        // },
        label: {
          backgroundColor: {
            image: labelBg,
            height: 104,
          },
          padding: [19, 90, 11, 18],
          show: true,
          position: "outside",
          rich: {
            b: {
              color: "#7BC0CB",
              fontSize: 12,
              lineHeight: 20,
            },
            c: {
              fontSize: 16,
            },
            abg: {
              // height: 104,
              // borderRadius: [4, 4, 0, 0]
            }
          },
          formatter: '{b|{b}}  {abg| \n} {c|{c}}{b|  亩}'
          // formatter: '{b|{b}} {c|{c}}{b|  亩}'
          // formatter: (params) => {
          //   // return [`{abg| } {b|{b}}`, '{b|{b}} {c|{c}}{b|  亩}'] 
          //   return '{b|{b}} {c|{c}}{b|  亩}'
          // }
          
          // formatter: "<div>sss</div>",
        },
        tooltip: {
          show: false,
        },
        xAxis3D: {
          min: -1,
          max: 1,
        },
        yAxis3D: {
          min: -1,
          max: 1,
        },
        zAxis3D: {
          min: -1,
          max: 1,
        },
        grid3D: {
          show: false,
          boxHeight: boxHeight, //圆环的高度
          viewControl: {
            //3d效果可以放大、旋转等,请自己去查看官方配置
            alpha: 40, //角度
            distance: 300, //调整视角到主体的距离,类似调整zoom
            rotateSensitivity: 0, //设置为0无法旋转
            zoomSensitivity: 0, //设置为0无法缩放
            panSensitivity: 0, //设置为0无法平移
            autoRotate: false, //自动旋转
          },
        },
        series: series,
      };
      return option;
    },

    //获取3d丙图的最高扇区的高度
    getHeight3D(series, height) {
      series.sort((a, b) => {
        return b.pieData.value - a.pieData.value;
      });
      return (height * 25) / series[0].pieData.value;
    },

    // 生成扇形的曲面参数方程,用于 series-surface.parametricEquation
    getParametricEquation(startRatio, endRatio, isSelected, isHovered, k, h) {
      // 计算
      let midRatio = (startRatio + endRatio) / 2;
      let startRadian = startRatio * Math.PI * 2;
      let endRadian = endRatio * Math.PI * 2;
      let midRadian = midRatio * Math.PI * 2;
      // 如果只有一个扇形,则不实现选中效果。
      if (startRatio === 0 && endRatio === 1) {
        isSelected = false;
      }
      // 通过扇形内径/外径的值,换算出辅助参数 k(默认值 1/3)
      k = typeof k !== "undefined" ? k : 1 / 3;
      // 计算选中效果分别在 x 轴、y 轴方向上的位移(未选中,则位移均为 0)
      let offsetX = isSelected ? Math.cos(midRadian) * 0.1 : 0;
      let offsetY = isSelected ? Math.sin(midRadian) * 0.1 : 0;
      // 计算高亮效果的放大比例(未高亮,则比例为 1)
      let hoverRate = isHovered ? 1.05 : 1;
      // 返回曲面参数方程
      return {
        u: {
          min: -Math.PI,
          max: Math.PI * 3,
          step: Math.PI / 32,
        },
        v: {
          min: 0,
          max: Math.PI * 2,
          step: Math.PI / 20,
        },
        x: function (u, v) {
          if (u < startRadian) {
            return (
              offsetX +
              Math.cos(startRadian) * (1 + Math.cos(v) * k) * hoverRate
            );
          }
          if (u > endRadian) {
            return (
              offsetX + Math.cos(endRadian) * (1 + Math.cos(v) * k) * hoverRate
            );
          }
          return offsetX + Math.cos(u) * (1 + Math.cos(v) * k) * hoverRate;
        },
        y: function (u, v) {
          if (u < startRadian) {
            return (
              offsetY +
              Math.sin(startRadian) * (1 + Math.cos(v) * k) * hoverRate
            );
          }
          if (u > endRadian) {
            return (
              offsetY + Math.sin(endRadian) * (1 + Math.cos(v) * k) * hoverRate
            );
          }
          return offsetY + Math.sin(u) * (1 + Math.cos(v) * k) * hoverRate;
        },
        z: function (u, v) {
          if (u < -Math.PI * 0.5) {
            return Math.sin(u);
          }
          if (u > Math.PI * 2.5) {
            return Math.sin(u) * h * 0.1;
          }
          return Math.sin(v) > 0 ? 1 * h * 0.1 : -1;
        },
      };
    },

    fomatFloat(num, n) {
      var f = parseFloat(num);
      if (isNaN(f)) {
        return false;
      }
      f = Math.round(num * Math.pow(10, n)) / Math.pow(10, n); // n 幂
      var s = f.toString();
      var rs = s.indexOf(".");
      //判定如果是整数,增加小数点再补0
      if (rs < 0) {
        rs = s.length;
        s += ".";
      }
      while (s.length <= rs + n) {
        s += "0";
      }
      return s;
    },

    bindListen(myChart) {
      // 监听鼠标事件,实现饼图选中效果(单选),近似实现高亮(放大)效果。
      let that = this;
      let selectedIndex = "";
      let hoveredIndex = "";
      // 监听点击事件,实现选中效果(单选)
      myChart.on("click", function (params) {
        // 从 option.series 中读取重新渲染扇形所需的参数,将是否选中取反。
        let isSelected =
          !that.option.series[params.seriesIndex].pieStatus.selected;
        let isHovered =
          that.option.series[params.seriesIndex].pieStatus.hovered;
        let k = that.option.series[params.seriesIndex].pieStatus.k;
        let startRatio =
          that.option.series[params.seriesIndex].pieData.startRatio;
        let endRatio = that.option.series[params.seriesIndex].pieData.endRatio;
        // 如果之前选中过其他扇形,将其取消选中(对 option 更新)
        if (selectedIndex !== "" && selectedIndex !== params.seriesIndex) {
          that.option.series[selectedIndex].parametricEquation =
            that.getParametricEquation(
              that.option.series[selectedIndex].pieData.startRatio,
              that.option.series[selectedIndex].pieData.endRatio,
              false,
              false,
              k,
              that.option.series[selectedIndex].pieData.value
            );
          that.option.series[selectedIndex].pieStatus.selected = false;
        }
        // 对当前点击的扇形,执行选中/取消选中操作(对 option 更新)
        that.option.series[params.seriesIndex].parametricEquation =
          that.getParametricEquation(
            startRatio,
            endRatio,
            isSelected,
            isHovered,
            k,
            that.option.series[params.seriesIndex].pieData.value
          );
        that.option.series[params.seriesIndex].pieStatus.selected = isSelected;
        // 如果本次是选中操作,记录上次选中的扇形对应的系列号 seriesIndex
        isSelected ? (selectedIndex = params.seriesIndex) : null;
        // 使用更新后的 option,渲染图表
        myChart.setOption(that.option);
      });
      // 监听 mouseover,近似实现高亮(放大)效果
      myChart.on("mouseover", function (params) {
        // 准备重新渲染扇形所需的参数
        let isSelected;
        let isHovered;
        let startRatio;
        let endRatio;
        let k;
        // 如果触发 mouseover 的扇形当前已高亮,则不做操作
        if (hoveredIndex === params.seriesIndex) {
          return;
          // 否则进行高亮及必要的取消高亮操作
        } else {
          // 如果当前有高亮的扇形,取消其高亮状态(对 option 更新)
          if (hoveredIndex !== "") {
            // 从 option.series 中读取重新渲染扇形所需的参数,将是否高亮设置为 false。
            isSelected = that.option.series[hoveredIndex].pieStatus.selected;
            isHovered = false;
            startRatio = that.option.series[hoveredIndex].pieData.startRatio;
            endRatio = that.option.series[hoveredIndex].pieData.endRatio;
            k = that.option.series[hoveredIndex].pieStatus.k;
            // 对当前点击的扇形,执行取消高亮操作(对 option 更新)
            that.option.series[hoveredIndex].parametricEquation =
              that.getParametricEquation(
                startRatio,
                endRatio,
                isSelected,
                isHovered,
                k,
                that.option.series[hoveredIndex].pieData.value
              );
            that.option.series[hoveredIndex].pieStatus.hovered = isHovered;
            // 将此前记录的上次选中的扇形对应的系列号 seriesIndex 清空
            hoveredIndex = "";
          }
          // 如果触发 mouseover 的扇形不是透明圆环,将其高亮(对 option 更新)
          if (
            params.seriesName !== "mouseoutSeries" &&
            params.seriesName !== "pie2d"
          ) {
            // 从 option.series 中读取重新渲染扇形所需的参数,将是否高亮设置为 true。
            isSelected =
              that.option.series[params.seriesIndex].pieStatus.selected;
            isHovered = true;
            startRatio =
              that.option.series[params.seriesIndex].pieData.startRatio;
            endRatio = that.option.series[params.seriesIndex].pieData.endRatio;
            k = that.option.series[params.seriesIndex].pieStatus.k;
            // 对当前点击的扇形,执行高亮操作(对 option 更新)
            that.option.series[params.seriesIndex].parametricEquation =
              that.getParametricEquation(
                startRatio,
                endRatio,
                isSelected,
                isHovered,
                k,
                that.option.series[params.seriesIndex].pieData.value + 5
              );
            that.option.series[params.seriesIndex].pieStatus.hovered =
              isHovered;
            // 记录上次高亮的扇形对应的系列号 seriesIndex
            hoveredIndex = params.seriesIndex;
          }
          // 使用更新后的 option,渲染图表
          myChart.setOption(that.option);
        }
      });
      // 修正取消高亮失败的 bug
      myChart.on("globalout", function () {
        // 准备重新渲染扇形所需的参数
        let isSelected;
        let isHovered;
        let startRatio;
        let endRatio;
        let k;
        if (hoveredIndex !== "") {
          // 从 option.series 中读取重新渲染扇形所需的参数,将是否高亮设置为 true。
          isSelected = that.option.series[hoveredIndex].pieStatus.selected;
          isHovered = false;
          k = that.option.series[hoveredIndex].pieStatus.k;
          startRatio = that.option.series[hoveredIndex].pieData.startRatio;
          endRatio = that.option.series[hoveredIndex].pieData.endRatio;
          // 对当前点击的扇形,执行取消高亮操作(对 option 更新)
          that.option.series[hoveredIndex].parametricEquation =
            that.getParametricEquation(
              startRatio,
              endRatio,
              isSelected,
              isHovered,
              k,
              that.option.series[hoveredIndex].pieData.value
            );
          that.option.series[hoveredIndex].pieStatus.hovered = isHovered;
          // 将此前记录的上次选中的扇形对应的系列号 seriesIndex 清空
          hoveredIndex = "";
        }
        // 使用更新后的 option,渲染图表
        myChart.setOption(that.option);
      });
    },
  },
};
</script>

在这里插入图片描述
参考地址:https://www.cnblogs.com/houxianzhou/p/14807675.html

echart, 地图叠加自动选择

var uploadedDataURL = '/asset/get/s/data-1640589484383-TgctXdaF8.png';

var mapName = 'china';
var data = [
    { name: '天津', value: 4075 },
    { name: '湖北', value: 500 },
    { name: '湖南', value: 3212 },
    { name: '江西', value: 5000 },
    { name: '甘肃', value: 550 },
    { name: '浙江', value: 1233 },
];

var geoCoordMap = {};

/*获取地图数据*/

var mapFeatures = echarts.getMap(mapName).geoJson.features;
mapFeatures.forEach(function (item) {
    // 地区名称
    var name = item.properties.name;
    // 地区经纬度
    geoCoordMap[name] = item.properties.cp;
});

var max = 4000;

var pointData = []

for (var i = 0; i < data.length; i++) {
    var geoCoord = geoCoordMap[data[i].name];
    if (geoCoord) {
        pointData.push({
            name: data[i].name,
            value: geoCoord.concat(data[i].value),
        });
    }
}


option = {
    aspectScale: 1.5,
    tooltip: {
        trigger: 'axis',
        axisPointer: {
            type: 'shadow',
        },
    },
    grid: {
        // show: true,
        right: '10%',
        top: 5,
        bottom: '10%',
        left: '10%',
    },
    geo: [
        {
            map: mapName,
            zlevel: -1,
            zoom: 1.0,
            silent: true,
            layoutCenter: ['50%', '50%'],
            layoutSize: '100%',
            roam: false,
            itemStyle: {
                normal: {
                    borderColor: 'rgba(192,245,249,.8)',
                    borderWidth: 3,
                    shadowColor: '#6FFDFF',
                    shadowOffsetY: 0,
                    shadowBlur: 10,
                    // areaColor: 'rgba(29,85,139,.6)',
                },
            },
            label: {
                normal: {
                    //静态的时候展示样式
                    show: false, //是否显示地图省份得名称
                    textStyle: {
                        color: '#fff',
                        fontSize: 12,
                        fontFamily: 'Arial',
                    },
                },
                emphasis: {
                    //动态展示的样式
                    show: false,
                    color: '#fff',
                },
            },
        },
        {
            show: true,
            map: mapName,
            zoom: 1.0,
            layoutCenter: ['50%', '50%'],
            layoutSize: '100%',
            label: {
                normal: {
                    //静态的时候展示样式
                    show: false, //是否显示地图省份得名称
                    textStyle: {
                        color: '#fff',
                        fontSize: 12,
                        fontFamily: 'Arial',
                    },
                },
                emphasis: {
                    //动态展示的样式
                    color: '#fff',
                },
            },

            blur: {
                label: { show: true, color: '#000' },
            },
            roam: false, // 是否开启鼠标滚轮缩放
            itemStyle: {
                normal: {
                    label: {
                        show: true,
                        color: '#fff',
                    },
                    color: '#fff',
                    borderColor: '#32CBE0',
                    borderWidth: 1.5,
                    areaColor: {
                        type: 'linear-gradient',
                        x: 0,
                        y: 1000,
                        x2: 0,
                        y2: 0,
                        colorStops: [
                            {
                                offset: 0.5,
                                color: '#0D59C1', // 0% 处的颜色
                            },
                            {
                                offset: 1,
                                color: '#53C9C7', // 100% 处的颜色
                            },
                        ],
                        global: true, // 缺省为 false
                    },
                },
                emphasis: {
                    label: {
                        show: true,
                        color: '#fff',
                    },
                    borderWidth: 3,
                    borderColor: 'rgba(255, 230, 175,0.8)',
                    shadowColor: 'rgba(255, 230, 175,0.5)',
                    shadowBlur: 30,
                    textStyle: {
                        color: '#fff',
                        fontSize: 12,
                        backgroundColor: 'transparent',
                    },
                    areaColor: new echarts.graphic.LinearGradient(
                        0,
                        0,
                        0,
                        1,
                        [
                            {
                                offset: 0,
                                color: '#1cfbfe',
                            },
                            {
                                offset: 1,
                                color: '#3348e7',
                            },
                        ],
                        false
                    ),
                },
            },
        },
        {
            type: 'map',
            map: mapName,
            zlevel: -2,
            zoom: 1.0,
            layoutCenter: ['50%', '51.4%'],
            layoutSize: '100%',
            roam: false,
            silent: true,
            itemStyle: {
                normal: {
                    borderColor: 'rgba(35, 161, 184,0.5)',
                    shadowColor: 'rgba(35, 161, 184,0.8)',
                    shadowOffsetY: 5,
                    shadowBlur: 15,
                    areaColor: '#257AB2',
                },
            },
        },
        {
            type: 'map',
            map: mapName,
            zlevel: -3,
            zoom: 1.0,
            layoutCenter: ['50%', '52.4%'],
            layoutSize: '100%',
            roam: false,
            silent: true,
            itemStyle: {
                normal: {
                    borderColor: 'rgba(7, 65, 117,0.5)',
                    shadowColor: 'rgba(7, 65, 117,0.8)',
                    shadowOffsetY: 15,
                    shadowBlur: 8,
                    areaColor: '#0A2763',
                },
            },
        },
    ],
    series: [
        {
            type: 'map',
            layoutCenter: ['50%', '50%'],
            layoutSize: '100%',
            label: {
                normal: {
                    //静态的时候展示样式
                    show: false, //是否显示地图省份得名称
                    textStyle: {
                        color: '#fff',
                        fontSize: 12,
                    },
                },
                emphasis: {
                    //动态展示的样式
                    color: '#fff',
                },
            },
            // geoIndex: 0,
            map: mapName,
            tooltip: {
                trigger: 'item',
                backgroundColor: 'transparent',
                borderColor: 'transparent',
                extraCssText: 'z-index:100;color:#fff;',
                confine: true, //是否将 tooltip 框限制在图表的区域内
                formatter: function (params, ticket, callback) {
                    //根据业务自己拓展要显示的内容
                    var res = '';
                    var name = params.name;
                    var count = params.value ? params.value : 0;
                    res = `<div style="box-shadow: 0 0 10px #3BD9D9; padding: 10px; position: absolute; top: 0; left:0;  border-radius: 4px; border: 1px solid #04b9ff; background: linear-gradient(to bottom,  #51bfd4 0%,rgba(35,90,178,.8) 100%);">
                             <div style='color:#F4BD59; font-size: 14px;'>${name}</div>
                             <div style="display: flex; align-items: center;padding-top: 6px;">
                              <div style="height: 6px; width: 6px; border-radius: 50%; background:#F4BD59; margin-right: 10px;"></div> <span style='color:#fff;font-size: 12px;margin-right: 20px;'>tooltip</span><span style="font-size: 12px;font-family: 'PangMenZhengDao'">${count}</span>
                             </div>
                          </div>`;
                    return res;
                },
            },
            itemStyle: {
                normal: {
                    label: {
                        show: true,
                        color: '#fff',
                    },
                    color: '#fff',
                    borderColor: '#32CBE0',
                    borderWidth: 1.5,
                    areaColor: {
                        type: 'linear-gradient',
                        x: 0,
                        y: 1000,
                        x2: 0,
                        y2: 0,
                        colorStops: [
                            {
                                offset: 0.5,
                                color: '#0D59C1', // 0% 处的颜色
                            },
                            {
                                offset: 1,
                                color: '#53C9C7', // 100% 处的颜色
                            },
                        ],
                        global: true, // 缺省为 false
                    },
                },
                emphasis: {
                    label: {
                        show: true,
                        color: '#fff',
                    },
                    borderWidth: 3,
                    borderColor: 'rgba(255, 230, 175,0.8)',
                    shadowColor: 'rgba(255, 230, 175,0.5)',
                    shadowBlur: 30,
                    textStyle: {
                        color: '#fff',
                        fontSize: 12,
                        backgroundColor: 'transparent',
                    },
                    areaColor: new echarts.graphic.LinearGradient(
                        0,
                        0,
                        0,
                        1,
                        [
                            {
                                offset: 0,
                                color: '#1cfbfe',
                            },
                            {
                                offset: 1,
                                color: '#3348e7',
                            },
                        ],
                        false
                    ),
                },
            },
            data: data,
        },
        {
            type: 'effectScatter',
            coordinateSystem: 'geo',
            rippleEffect: {
                brushType: 'fill',
            },
            label: {
                show: true,
                color: '#fff',
                formatter: function (obj) {
                    return obj.name;
                },
            },
            symbolSize: function (val) {
                var value = val[2];
                if (value < max) {
                    return 15;
                }
                return 20;
            },
            showEffectOn: 'render', //加载完毕显示特效
            itemStyle: {
                normal: {
                    color: '#FEBE13', // 圆点的颜色
                    shadowBlur: 10,
                    shadowColor: '#333',
                },
            },
            zlevel: 6,
            data: pointData,
        },
        {
            type: 'custom',
            coordinateSystem: 'geo',
            renderItem: function (params, api) {
                //具体实现自定义图标的方法
                return {
                    type: 'image',
                    style: {
                        image: uploadedDataURL, // 自定义的图片地址
                        x:
                            api.coord([pointData[params.dataIndex].value[0], pointData[params.dataIndex].value[1]])[0] -
                            6, // 数据的设置
                        y:
                            api.coord([pointData[params.dataIndex].value[0], pointData[params.dataIndex].value[1]])[1] -
                            34,
                    },
                };
            },
            zlevel: 10,
            data: pointData,
        },
    ],
};

var count = 0;
var timer = null;
var dataLength = option.series[0].data.length;
timer && clearInterval(timer);
timer = setInterval(() => {
    myChart.dispatchAction({
        type: 'downplay',
        seriesIndex: 0,
    });
    myChart.dispatchAction({
        type: 'highlight',
        seriesIndex: 0,
        dataIndex: count % dataLength,
    });
    myChart.dispatchAction({
        type: 'showTip',
        seriesIndex: 0,
        dataIndex: count % dataLength,
    });
    count++;
}, 3000);
myChart.on('mouseover', function (params) {
    clearInterval(timer);
    myChart.dispatchAction({
        type: 'downplay',
        seriesIndex: 0,
    });
    myChart.dispatchAction({
        type: 'highlight',
        seriesIndex: 0,
        dataIndex: params.dataIndex,
    });
    myChart.dispatchAction({
        type: 'showTip',
        seriesIndex: 0,
        dataIndex: params.dataIndex,
    });
});
myChart.on('mouseout', function (params) {
    timer && clearInterval(timer);
    timer = setInterval(function () {
        myChart.dispatchAction({
            type: 'downplay',
            seriesIndex: 0,
        });
        myChart.dispatchAction({
            type: 'highlight',
            seriesIndex: 0,
            dataIndex: count % dataLength,
        });
        myChart.dispatchAction({
            type: 'showTip',
            seriesIndex: 0,
            dataIndex: count % dataLength,
        });
        count++;
    }, 3000);
});

在这里插入图片描述

var uploadedDataURL = '/asset/get/s/data-1640589484383-TgctXdaF8.png';

var mapName = 'china';
var data = [
    { name: '天津', value: 4075 },
    { name: '湖北', value: 500 },
    { name: '湖南', value: 3212 },
    { name: '江西', value: 5000 },
    { name: '甘肃', value: 550 },
    { name: '浙江', value: 1233 },
];

var geoCoordMap = {};

/*获取地图数据*/

var mapFeatures = echarts.getMap(mapName).geoJson.features;
mapFeatures.forEach(function (item) {
    // 地区名称
    var name = item.properties.name;
    // 地区经纬度
    geoCoordMap[name] = item.properties.cp;
});

var max = 4000;

var pointData = []

for (var i = 0; i < data.length; i++) {
    var geoCoord = geoCoordMap[data[i].name];
    if (geoCoord) {
        pointData.push({
            name: data[i].name,
            value: geoCoord.concat(data[i].value),
        });
    }
}


option = {
    tooltip: {
        trigger: 'axis',
        axisPointer: {
            type: 'shadow',
        },
    },
    grid: {
        // show: true,
        right: '10%',
        top: 5,
        bottom: '10%',
        left: '10%',
    },
    geo: [
        {
            type: 'map',
            map: mapName,
            zlevel: -3,
            zoom: 1.0,
            layoutCenter: ['50%', '50.8%'],
            layoutSize: '100%',
            roam: false,
            silent: true,
            itemStyle: {
                normal: {
                    borderColor: 'rgba(7, 65, 117,0.5)',
                    // shadowColor: 'rgba(32,57,200,0.8)',
                    shadowColor: 'rgba(42,83,251,0.8)',
                    shadowOffsetY: 10,
                    shadowBlur: 1,
                    areaColor: 'rgba(32,57,200,1)',
                },
            },
        },
    ],
    series: [
        {
            type: 'map',
            layoutCenter: ['50%', '50%'],
            layoutSize: '100%',
            label: {
                normal: {
                    //静态的时候展示样式
                    show: false, //是否显示地图省份得名称
                    textStyle: {
                        color: '#fff',
                        fontSize: 12,
                    },
                },
                emphasis: {
                    //动态展示的样式
                    color: '#fff',
                },
            },
            // geoIndex: 0,
            map: mapName,
            tooltip: {
                trigger: 'item',
                backgroundColor: 'transparent',
                borderColor: 'transparent',
                extraCssText: 'z-index:100;color:#fff;',
                confine: true, //是否将 tooltip 框限制在图表的区域内
                formatter: function (params, ticket, callback) {
                    //根据业务自己拓展要显示的内容
                    var res = '';
                    var name = params.name;
                    var count = params.value ? params.value : 0;
                    res = `<div style="box-shadow: 0 0 10px #3BD9D9; padding: 10px; position: absolute; top: 0; left:0;  border-radius: 4px; border: 1px solid #04b9ff; background: linear-gradient(to bottom,  #51bfd4 0%,rgba(35,90,178,.8) 100%);">
                             <div style='color:#F4BD59; font-size: 14px;'>${name}</div>
                             <div style="display: flex; align-items: center;padding-top: 6px;">
                              <div style="height: 6px; width: 6px; border-radius: 50%; background:#F4BD59; margin-right: 10px;"></div> <span style='color:#fff;font-size: 12px;margin-right: 20px;'>tooltip</span><span style="font-size: 12px;font-family: 'PangMenZhengDao'">${count}</span>
                             </div>
                          </div>`;
                    return res;
                },
            },
            itemStyle: {
                normal: {
                    label: {
                        show: true,
                        color: '#fff',
                    },
                    color: '#fff',
                    borderColor: '#32CBE0',
                    borderWidth: 1.5,
                    areaColor: {
                        type: 'linear-gradient',
                        x: 0,
                        y: 1000,
                        x2: 0,
                        y2: 0,
                        colorStops: [
                            {
                                offset: 0.5,
                                color: '#0D59C1', // 0% 处的颜色
                            },
                            {
                                offset: 1,
                                color: '#53C9C7', // 100% 处的颜色
                            },
                        ],
                        global: true, // 缺省为 false
                    },
                },
                emphasis: {
                    label: {
                        show: true,
                        color: '#fff',
                    },
                    borderWidth: 3,
                    borderColor: 'rgba(255, 230, 175,0.8)',
                    shadowColor: 'rgba(255, 230, 175,0.5)',
                    shadowBlur: 30,
                    textStyle: {
                        color: '#fff',
                        fontSize: 12,
                        backgroundColor: 'transparent',
                    },
                    areaColor: new echarts.graphic.LinearGradient(
                        0,
                        0,
                        0,
                        1,
                        [
                            {
                                offset: 0,
                                color: '#1cfbfe',
                            },
                            {
                                offset: 1,
                                color: '#3348e7',
                            },
                        ],
                        false
                    ),
                },
            },
            data: data,
        },
        {
            type: 'effectScatter',
            coordinateSystem: 'geo',
            rippleEffect: {
                brushType: 'fill',
            },
            label: {
                show: true,
                color: '#fff',
                formatter: function (obj) {
                    return obj.name;
                },
            },
            symbolSize: function (val) {
                var value = val[2];
                if (value < max) {
                    return 15;
                }
                return 20;
            },
            showEffectOn: 'render', //加载完毕显示特效
            itemStyle: {
                normal: {
                    color: '#FEBE13', // 圆点的颜色
                    shadowBlur: 10,
                    shadowColor: '#333',
                },
            },
            zlevel: 6,
            data: pointData,
        },
        {
            type: 'custom',
            coordinateSystem: 'geo',
            renderItem: function (params, api) {
                //具体实现自定义图标的方法
                return {
                    type: 'image',
                    style: {
                        image: uploadedDataURL, // 自定义的图片地址
                        x:
                            api.coord([pointData[params.dataIndex].value[0], pointData[params.dataIndex].value[1]])[0] -
                            6, // 数据的设置
                        y:
                            api.coord([pointData[params.dataIndex].value[0], pointData[params.dataIndex].value[1]])[1] -
                            34,
                    },
                };
            },
            zlevel: 10,
            data: pointData,
        },
    ],
};

var count = 0;
var timer = null;
var dataLength = option.series[0].data.length;
timer && clearInterval(timer);
timer = setInterval(() => {
    myChart.dispatchAction({
        type: 'downplay',
        seriesIndex: 0,
    });
    myChart.dispatchAction({
        type: 'highlight',
        seriesIndex: 0,
        dataIndex: count % dataLength,
    });
    myChart.dispatchAction({
        type: 'showTip',
        seriesIndex: 0,
        dataIndex: count % dataLength,
    });
    count++;
}, 3000);
myChart.on('mouseover', function (params) {
    clearInterval(timer);
    myChart.dispatchAction({
        type: 'downplay',
        seriesIndex: 0,
    });
    myChart.dispatchAction({
        type: 'highlight',
        seriesIndex: 0,
        dataIndex: params.dataIndex,
    });
    myChart.dispatchAction({
        type: 'showTip',
        seriesIndex: 0,
        dataIndex: params.dataIndex,
    });
});
myChart.on('mouseout', function (params) {
    timer && clearInterval(timer);
    timer = setInterval(function () {
        myChart.dispatchAction({
            type: 'downplay',
            seriesIndex: 0,
        });
        myChart.dispatchAction({
            type: 'highlight',
            seriesIndex: 0,
            dataIndex: count % dataLength,
        });
        myChart.dispatchAction({
            type: 'showTip',
            seriesIndex: 0,
            dataIndex: count % dataLength,
        });
        count++;
    }, 3000);
});

源地址链接: https://www.isqqw.com/echartsdetail?id=15245

手动写switch

<style>

    .switch-box{
      cursor: pointer;
    }
    .switch-box input{
      display: none;
    }
    .switch-box input[type=checkbox]:checked + .switch-bg{
      background-color: #1988D3;
    }
    .switch-box .switch-bg{
      display: inline-block;
      width: 40px;
      height: 20px;
      background-color: #999;
      position: relative;
      border-radius: 10px;
    }
    .switch-box .switch-text{
      display: inline-block;
      color: #fff;
      font-size: 14px;
      line-height: 20px;
      /* vertical-align: top; */
      position: absolute;
      top: 0;
    }
    .switch-true{
      left: 2px;
    }
    .switch-box .switch-false {
      right: 2px;
    }
    .switch-box .switch-bg::after{
      content: '';
      position: absolute;
      display: inline-block;
      width: 20px;
      height: 20px;
      background-color: #fff;
      z-index: 999;
      border-radius: 10px;
      left: 1px;
      animation: subTrueR .5s backwards;
    }
    .switch-box input[type=checkbox]:checked + .switch-bg::after{
      left: 19px;
      animation: subTrue .5s forwards;
    }
    @keyframes subTrue {
      0% {
        left: 1px;
      }
      100% {
        left: 19px;
      }
    }
    @keyframes subTrueR {
      0% {
        left: 19px;
      }
      100% {
        left: 1px;
      }
    }
</style>

  <label class="switch-box">
    <input type="checkbox" checked value="1">
    <div class="switch-bg">
      <span class="switch-text switch-true"></span>
      <span class="switch-text switch-false"></span>
    </div>
  </label>

在这里插入图片描述

重写checkbox和radio


<style>
.custom-box{
  background: #FFF;
}
.custom-label{
  color: #000;
  font-size: 1.8rem;
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 1rem;
  border-bottom: 1px solid #ccc;
  input.custom-radio[type="checkbox"]{
    width: 2rem;
    height: 2rem;
    margin: 0 0.4rem 0 0;
    appearance: none;
    position: relative;
    background: transparent;
    border: 1px solid #ccc;
  }
  input.custom-radio[type="checkbox"]:checked {
    border: 1px solid #0076FE;
    background: #0076FE;
  }
  input.custom-radio[type="checkbox"]:checked::before{
    content: "\2714";
    position: absolute;
    top: -35%;
    left: 14%;
    width: 50%;
    height: 50%;
    border: none;
    font-size: 2rem;
    font-weight: 600;
    color: #FFF;
  }
}
.custom-label{
  color: #000;
  font-size: 1.8rem;
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 1rem;
  border-bottom: 1px solid #ccc;
  input.custom-radio[type="radio"] {
    width: 2rem;
    height: 2rem;
    margin: 0 0.4rem 0 0;
    appearance: none;
    position: relative;
    background: transparent;
    border: 1px solid #ccc;
    border-radius: 50%;
  }
  /** 选中的样式*/
  input.custom-radio[type="radio"]:checked{
    border: 1px solid #0076FE;
  }
  input.custom-radio[type="radio"]:checked::before {
    content: "";
    background: #0076FE;
    position: absolute;
    top: 25%;
    left: 25%;
    width: 50%;
    height: 50%;
    border: none;
    border-radius: 50%;
  }
}
</style>

<div class="custom-box" style="width: 30%;">
      <label class="custom-label" key="valnull">
        <span>全部</span>
        <input name="qx" class="custom-radio" type="radio" value="" v-model="formData.areaCode" @click="fnSearch('areaCode', '')" /> 
      </label>
      <label class="custom-label" v-for="(item,idx) in qxOptions" :key="idx">
        <span>{{item.name}}</span>
        <input name="qx" class="custom-radio" type="radio" :value="item.areaCode" v-model="formData.areaCode" @click="fnSearch('areaCode', item.areaCode)" /> 
      </label>
    </div>
    <div class="custom-box" style="width: 30%;">
      <label class="custom-label" key="valnull">
        <span>全部</span>
        <input name="qx" class="custom-radio" type="checkbox" value="" v-model="formData.areaCode2" /> 
      </label>
      <label class="custom-label" v-for="(item,idx) in qxOptions" :key="idx">
        <span>{{item.name}}</span>
        <input name="qx" class="custom-radio" type="checkbox" :value="item.areaCode" v-model="formData.areaCode2" /> 
      </label>
    </div>
<script>
formData: {
    areaCode: '',
    areaCode2: [],
},

fnSearch(key, val){
	this.formData[key] = val
},
</script>

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值