JS实现的罗盘装饰

简介: JS实现的罗盘装饰
 <div id="container" style="height: 100%"></div>
 
 
  <script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.1/files/dist/echarts.min.js"></script>

JS:

 var dom = document.getElementById('container');
    var myChart = echarts.init(dom, null, {
      renderer: 'canvas',
      useDirtyRect: false
    });
    var app = {};
 
    var option;
 
    const colors = ['#FFAE57', '#FF7853', '#EA5151', '#CC3F57', '#9A2555'];
    const bgColor = '#2E2733';
    const itemStyle = {
      star5: {
        color: colors[0]
      },
      star4: {
        color: colors[1]
      },
      star3: {
        color: colors[2]
      },
      star2: {
        color: colors[3]
      }
    };
    const data = [
      {
        name: '虚构',
        itemStyle: {
          color: colors[1]
        },
        children: [
          {
            name: '小说',
            children: [
              {
                name: '5☆',
                children: [
                  {
                    name: '疼'
                  },
                  {
                    name: '慈悲'
                  },
                  {
                    name: '楼下的房客'
                  }
                ]
              },
              {
                name: '4☆',
                children: [
                  {
                    name: '虚无的十字架'
                  },
                  {
                    name: '无声告白'
                  },
                  {
                    name: '童年的终结'
                  }
                ]
              },
              {
                name: '3☆',
                children: [
                  {
                    name: '疯癫老人日记'
                  }
                ]
              }
            ]
          },
          {
            name: '其他',
            children: [
              {
                name: '5☆',
                children: [
                  {
                    name: '纳博科夫短篇小说全集'
                  }
                ]
              },
              {
                name: '4☆',
                children: [
                  {
                    name: '安魂曲'
                  },
                  {
                    name: '人生拼图版'
                  }
                ]
              },
              {
                name: '3☆',
                children: [
                  {
                    name: '比起爱你,我更需要你'
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        name: '非虚构',
        itemStyle: {
          color: colors[2]
        },
        children: [
          {
            name: '设计',
            children: [
              {
                name: '5☆',
                children: [
                  {
                    name: '无界面交互'
                  }
                ]
              },
              {
                name: '4☆',
                children: [
                  {
                    name: '数字绘图的光照与渲染技术'
                  },
                  {
                    name: '日本建筑解剖书'
                  }
                ]
              },
              {
                name: '3☆',
                children: [
                  {
                    name: '奇幻世界艺术\n&RPG地图绘制讲座'
                  }
                ]
              }
            ]
          },
          {
            name: '社科',
            children: [
              {
                name: '5☆',
                children: [
                  {
                    name: '痛点'
                  }
                ]
              },
              {
                name: '4☆',
                children: [
                  {
                    name: '卓有成效的管理者'
                  },
                  {
                    name: '进化'
                  },
                  {
                    name: '后物欲时代的来临'
                  }
                ]
              },
              {
                name: '3☆',
                children: [
                  {
                    name: '疯癫与文明'
                  }
                ]
              }
            ]
          },
          {
            name: '心理',
            children: [
              {
                name: '5☆',
                children: [
                  {
                    name: '我们时代的神经症人格'
                  }
                ]
              },
              {
                name: '4☆',
                children: [
                  {
                    name: '皮格马利翁效应'
                  },
                  {
                    name: '受伤的人'
                  }
                ]
              },
              {
                name: '3☆'
              },
              {
                name: '2☆',
                children: [
                  {
                    name: '迷恋'
                  }
                ]
              }
            ]
          },
          {
            name: '居家',
            children: [
              {
                name: '4☆',
                children: [
                  {
                    name: '把房子住成家'
                  },
                  {
                    name: '只过必要生活'
                  },
                  {
                    name: '北欧简约风格'
                  }
                ]
              }
            ]
          },
          {
            name: '绘本',
            children: [
              {
                name: '5☆',
                children: [
                  {
                    name: '设计诗'
                  }
                ]
              },
              {
                name: '4☆',
                children: [
                  {
                    name: '假如生活糊弄了你'
                  },
                  {
                    name: '博物学家的神秘动物图鉴'
                  }
                ]
              },
              {
                name: '3☆',
                children: [
                  {
                    name: '方向'
                  }
                ]
              }
            ]
          },
          {
            name: '哲学',
            children: [
              {
                name: '4☆',
                children: [
                  {
                    name: '人生的智慧'
                  }
                ]
              }
            ]
          },
          {
            name: '技术',
            children: [
              {
                name: '5☆',
                children: [
                  {
                    name: '代码整洁之道'
                  }
                ]
              },
              {
                name: '4☆',
                children: [
                  {
                    name: 'Three.js 开发指南'
                  }
                ]
              }
            ]
          }
        ]
      }
    ];
    for (let j = 0; j < data.length; ++j) {
      let level1 = data[j].children;
      for (let i = 0; i < level1.length; ++i) {
        let block = level1[i].children;
        let bookScore = [];
        let bookScoreId;
        for (let star = 0; star < block.length; ++star) {
          let style = (function (name) {
            switch (name) {
              case '5☆':
                bookScoreId = 0;
                return itemStyle.star5;
              case '4☆':
                bookScoreId = 1;
                return itemStyle.star4;
              case '3☆':
                bookScoreId = 2;
                return itemStyle.star3;
              case '2☆':
                bookScoreId = 3;
                return itemStyle.star2;
            }
          })(block[star].name);
          block[star].label = {
            color: style.color,
            downplay: {
              opacity: 0.5
            }
          };
          if (block[star].children) {
            style = {
              opacity: 1,
              color: style.color
            };
            block[star].children.forEach(function (book) {
              book.value = 1;
              book.itemStyle = style;
              book.label = {
                color: style.color
              };
              let value = 1;
              if (bookScoreId === 0 || bookScoreId === 3) {
                value = 5;
              }
              if (bookScore[bookScoreId]) {
                bookScore[bookScoreId].value += value;
              } else {
                bookScore[bookScoreId] = {
                  color: colors[bookScoreId],
                  value: value
                };
              }
            });
          }
        }
        level1[i].itemStyle = {
          color: data[j].itemStyle.color
        };
      }
    }
    option = {
      backgroundColor: bgColor,
      color: colors,
      series: [
        {
          type: 'sunburst',
          center: ['50%', '48%'],
          data: data,
          sort: function (a, b) {
            if (a.depth === 1) {
              return b.getValue() - a.getValue();
            } else {
              return a.dataIndex - b.dataIndex;
            }
          },
          label: {
            rotate: 'radial',
            color: bgColor
          },
          itemStyle: {
            borderColor: bgColor,
            borderWidth: 2
          },
          levels: [
            {},
            {
              r0: 0,
              r: 40,
              label: {
                rotate: 0
              }
            },
            {
              r0: 40,
              r: 105
            },
            {
              r0: 115,
              r: 140,
              itemStyle: {
                shadowBlur: 2,
                shadowColor: colors[2],
                color: 'transparent'
              },
              label: {
                rotate: 'tangential',
                fontSize: 10,
                color: colors[0]
              }
            },
            {
              r0: 140,
              r: 145,
              itemStyle: {
                shadowBlur: 80,
                shadowColor: colors[0]
              },
              label: {
                position: 'outside',
                textShadowBlur: 5,
                textShadowColor: '#333'
              },
              downplay: {
                label: {
                  opacity: 0.5
                }
              }
            }
          ]
        }
      ]
    };
 
    if (option && typeof option === 'object') {
      myChart.setOption(option);
    }
 
    window.addEventListener('resize', myChart.resize);
相关文章
|
3月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
81 2
|
3月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的医院综合管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的医院综合管理系统附带文章源码部署视频讲解等
42 5
|
3月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
73 4
|
3月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
62 4
|
3月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
84 4
|
3月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
88 3
|
3月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp宿舍管理系统的附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp宿舍管理系统的附带文章源码部署视频讲解等
72 3
|
3月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的家政平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的家政平台附带文章源码部署视频讲解等
54 3
|
3月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物医院系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物医院系统附带文章源码部署视频讲解等
47 2