Echarts饼图样式之添加内圈阴影达到立体效果

 更新时间:2024年02月01日 11:59:20   作者:Nichole_9978  
饼图主要是通过扇形的弧度表现不同类目的数据在总和中的占比,它的数据格式比柱状图更简单,这篇文章主要给大家介绍了关于Echarts饼图样式之添加内圈阴影达到立体效果的相关资料,文中还介绍了echarts饼图外部阴影设置的方法,需要的朋友可以参考下

实现思想:

使用双饼图,将内圈饼图与外圈饼图数据一致,并保持高亮

最终效果:

1.在series中添加内圈饼图

注意:data要与外圈饼图一致,饼图中心与外圈饼图一致,饼图外径与外圈饼图内径一致(+1效果更好)

	{
      type: 'pie',
      radius: ['36%', '41%'],
      center: ['35%', '55%'],
      startAngle: 135,
      minAngle: 12,
      label: {
      	show: false
      },
      hoverAnimation: false,
      legendHoverLink: false,
      animation: false,
      tooltip: {
      	show: false
      },
      data: data,
  }

2.保持内圈高亮,达到阴影效果

	myChart.dispatchAction({
		type: "highlight",
		seriesIndex: 1, // series 数据数组第几个
	});

完整script代码:

        $(function () {
                var main = document.getElementById('item1');
                var msg=[
                    {name: '字段1', value: '16'},
                    {name: '字段2', value: '34'},
                    {name: '字段3', value: '52'},
                    {name: '字段4', value: '48'},
                    {name: '字段5', value: '88'}
                ]
                nanding_bing_echart(msg, main);
            })
        function nanding_bing_echart(msg, main) {
            var data = msg;
            
            // 计算和
            var num = 0;
            for (var i = 0; i < data.length; i++) {
                num += Number(data[i].value);
            }
            var myChart = echarts.init(main);
            option = null;


            myChart.setOption({
                backgroundColor:'#1a3c81',
                legend: {
                    //是否显示图例
                    show: true,
                    //plain普通(默认),scroll数量较多时可使用可滚动翻页的图例(水平\垂直)
                    type: 'plain',
                    //图例列表的布局朝向:水平horizontal、垂直vertical
                    orient: 'vertical',
                    //图例组件离容器上(left,top,right,bottom)侧的距离
                    bottom: '30',
                    right: '30',
                    //图例每项之间的间隔。横向布局时为水平间隔,纵向布局时为纵向间隔。
                    itemGap: 6,
                    //图例标记的图形宽度
                    itemWidth: 10,
                    //图例标记的图形高度
                    itemHeight: 10,
                    //图例的公用文本样式(包括颜色\字体\字号\等等...)
                    textStyle: {
                        color: font_color,
                        fontSize: 14,
                    },
                    //控制是否可以通过点击图例改变系列的显示状态:true\false\single\multiple
                    selectedMode: true,
                    //图例关闭时的颜色
                    inactiveColor: '#ccc',
                    icon: 'circle',
                    formatter: function (name) {
                        var value;
                        for (var i = 0; i < data.length; i++) {
                            if (data[i].name == name) {
                                value = data[i].value;
                            }
                        }
                        return name + ' : ' + Math.round(value / num * 10000) / 100 + "%";

                    },
                },
                tooltip: {
                    confine: true,
                    //是否显示提示框组件,包括提示框浮层和 axisPointer
                    show: true,
                    //触发类型:'item':数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用\'axis':坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用\'none':什么都不触发
                    trigger: 'item',
                    //提示框浮层内容格式器:{a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
                    formatter: ' {b} :<br/> {c} 人 ({d}%)',
                    //是否显示提示框浮层,默认显示
                    showContent: true,
                    //是否永远显示提示框内容,默认情况下在移出可触发提示框区域后 一定时间 后隐藏,设置为 true 可以保证一直显示提示框内容
                    alwaysShowContent: false,
                    //提示框触发的条件:mousemove,click,mousemove|click,none
                    triggerOn: 'mousemove|click',
                    //浮层隐藏的延迟,单位为 ms,在 alwaysShowContent 为 true 的时候无效
                    hideDelay: 100,
                    //鼠标是否可进入提示框浮层中,默认为false,如需详情内交互,如添加链接,按钮,可设置为 true
                    enterable: false,
                    //是否将 tooltip 框限制在图表的区域内,当图表外层的 dom 被设置为 'overflow: hidden',或者移动端窄屏,导致 tooltip 超出外界被截断时,此配置比较有用
                    confine: true,
                    //提示框浮层的移动动画过渡时间,单位是 s,设置为 0 的时候会紧跟着鼠标移动
                    transitionDuration: 0.4,
                    //提示框浮层的背景颜色
                    backgroundColor: 'rgba(50,50,50,0.7)',
                    //提示框浮层的边框颜色
                    borderColor: '#333',
                    //提示框浮层的文本样式(颜色\字体\字号\等等...)
                    textStyle: {
                        color: font_color,
                        fontSize: 12,
                    },
                },
                animationDuration: 2000,
                animationDurationUpdate: 800,
                series: [
                    {
                        color:['#17b367', '#02aafe', '#814ecc', '#cb8251', '#a3c84e', '#4c63d9'],
                        type: 'pie',
                        radius: ['40%', '70%'],
                        center: ['35%', '55%'],
                        startAngle: 135,
                        minAngle: 12,
                        data: data,
                        label:{
                            //是否显示标签(圆环false)
                            show: true,
                            // 标签的位置outside:有视觉引导线连接,inside==inner,圆环中心center
                            position: 'outside',
                            //标签内容:{a}:系列名,{b}:数据名,{c}:数据值,{d}:百分比
                            formatter: '{b}\n{c}人',
                            // 标签文字颜色
                            color: font_color,
                        },
                        labelLine: {
                            //是否显示视觉引导线
                            show: true,
                            //是否平滑视觉引导线,默认不平滑,可以设置成 true 平滑显示,也可以设置为 0 到 1 的值,表示平滑程度
                            smooth: false,
                        },
                    },{
                        type: 'pie',
                        radius: ['36%', '41%'],
                        center: ['35%', '55%'],
                        startAngle: 135,
                        minAngle: 12,
                        label: {
                            show: false
                        },
                        hoverAnimation: false,
                        legendHoverLink: false,
                        animation: false,
                        tooltip: {
                        show: false
                        },
                        data: data,
                    },
                ]
            }, true);
            // 保持内圈高亮,达到阴影效果
            myChart.dispatchAction({
                type: "highlight",
                seriesIndex: 1, // series 数据数组第几个
                });
            // 自适应大小
            window.addEventListener("resize", function () { 
                myChart.resize();
            });
        };

附echarts饼图外部阴影设置方法:

    var option = {
      color: ['rgba(91, 143, 249, 0.85)', 'rgba(90, 216, 166, 0.85)', 'rgba(255, 82, 77, 0.85)'],
      tooltip: {
        trigger: 'item'
      },
      legend: {
        type: 'plain',
        orient: 'vertical',
        right: '10%',
        top: 'center',
        align: 'left',
        itemWidth: 8, // 设置宽度
        itemHeight: 8, // 设置高度
        itemGap: 16, // 设置间距,
        symbolKeepAspect: false,
        formatter: function (name) {
          let data = option.series[1].data
          console.log(data, 'data')
          let total = 0
          let tarValue
          for (let i = 0; i < data.length; i++) {
            total += data[i].value
            if (data[i].name == name) {
              tarValue = data[i].value
            }
          }
          //计算出百分比
          let p = Math.round((tarValue / total) * 100) + '%'
          return `${name}      ${tarValue}  ${p}`
          //name是名称,tarValue是数值
        },
      },
      series: [
          // 设置外部阴影
      {
          name: '',
          type: 'pie',
          clockWise: false,
          radius: '80%', //边框大小
          color: '#fff',
          center: ['30%', '50%'],
          data: [{
            value: 10,
            itemStyle: {
              // borderColor: '#fff',
              borderWidth: 1,
              shadowBlur: 9, // 图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果
              shadowOffsetX: 5, // 阴影水平方向上的偏移距离
              shadowOffsetY: 4,
              shadowColor: '#5B8FF9' // 阴影颜色

            }
          }]
        },
        //内部饼图
        {
          type: 'pie',
          radius: '80%',
          center: ['30%', '50%'], //调整echarts的位置,第一个值调整左右,第二个值调整上下,也可以设置具体数字像素值,center: [200, 300],
          label: { //echarts内部显示数字
            color: '#fff',
            show: true,
            formatter: '{d}',
            position: 'inside',
          },
          data: [{
              value: 85,
              name: '正常',
            },
            {
              value: 7,
              name: '停运+'
            },
            {
              value: 8,
              name: '停运-'
            },

          ],
          itemStyle: {
            borderColor: '#fff',
            borderWidth: 2,

          },

        },

      ]
    };

总结 

到此这篇关于Echarts饼图样式之添加内圈阴影达到立体效果的文章就介绍到这了,更多相关Echarts饼图添加内圈阴影内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于MVC方式实现三级联动(JavaScript)

    基于MVC方式实现三级联动(JavaScript)

    这篇文章主要为大家详细介绍了基于MVC方式实现三级联动的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Bootstrap开发实战之第一次接触Bootstrap

    Bootstrap开发实战之第一次接触Bootstrap

    Bootstrap开发实战之第一次接触Bootstrap,想要学好一门语言,首先应该进行深入了解,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • js实现的倒计时按钮实例

    js实现的倒计时按钮实例

    这篇文章主要介绍了js实现的倒计时按钮,实例分析了javascript倒计时效果的相关实现技巧,需要的朋友可以参考下
    2015-06-06
  • 原生JS实现九宫格抽奖

    原生JS实现九宫格抽奖

    这篇文章主要为大家详细介绍了原生JS九宫格抽奖,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • JavaScript中使用import 和require打包后实现原理分析

    JavaScript中使用import 和require打包后实现原理分析

    这篇文章主要介绍了JavaScript中使用import 和require打包后实现原理分析,需要的朋友可以参考下
    2018-03-03
  • 微信小程序实现写入读取缓存详解

    微信小程序实现写入读取缓存详解

    这篇文章主要介绍了微信小程序实现写入缓存与读取缓存详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • webpack+vue2构建vue项目骨架的方法

    webpack+vue2构建vue项目骨架的方法

    本篇文章主要介绍了webpack+vue2构建vue项目骨架的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • webpack4的迁移的使用方法

    webpack4的迁移的使用方法

    本篇文章主要介绍了webpack4的迁移的使用方法,主要介绍了如何从webpack1.x升级到4.x,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Bootstrap中定制LESS-颜色及导航条(推荐)

    Bootstrap中定制LESS-颜色及导航条(推荐)

    这篇文章主要介绍了Bootstrap中定制LESS-颜色及导航条的相关资料,非常不错具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-11-11
  • unapp微信小程序转发分享及携带参数的2种方式

    unapp微信小程序转发分享及携带参数的2种方式

    这篇文章主要给大家介绍了关于unapp微信小程序转发分享及携带参数的2种方式,我们在微信小程序中经常会使用到分享商品海报,或者是重绘微信小程序分享链的图片功能,需要的朋友可以参考下
    2023-11-11

最新评论