Highcharts 实现3D饼图 tooltip轮播

news2024/10/5 20:38:17

在这里插入图片描述
实现3D饼图,并且轮播显示tooltip
自定义toottip样式

import Highcharts from 'highcharts';
import highcharts from 'highcharts';
import highcharts3d from 'highcharts/highcharts-3d';

highcharts3d(Highcharts);
highcharts3d(highcharts);
import { useEffect, useState } from 'react';

/**
 * 不同高度的3D圆环图
 * */
export function getPie(id) {
  let colorArr = ['#f04f45', '#66f2ff', '#7fa9ff', '#d26657', '#F4414A'];

  Highcharts.getOptions().colors = Highcharts.map(Highcharts.getOptions().colors, function(
    color,
    i
  ) {
    return {
      radialGradient: {
        cx: 0.5,
        cy: 0.3,
        r: 0.7,
      },
      stops: [
        [0, colorArr[i]],
        [
          1,
          Highcharts.Color(colorArr[i])
            .brighten(-0.2)
            .get('rgb'),
        ],
      ],
    };
  });
  var each = highcharts.each,
    round = Math.round,
    cos = Math.cos,
    sin = Math.sin,
    deg2rad = Math.deg2rad;
  highcharts.wrap(highcharts.seriesTypes.pie.prototype, 'translate', function(proceed) {
    proceed.apply(this, [].slice.call(arguments, 1));
    // Do not do this if the chart is not 3D
    if (!this.chart.is3d()) {
      return;
    }
    var series = this,
      chart = series.chart,
      options = chart.options,
      seriesOptions = series.options,
      depth = seriesOptions.depth || 0,
      options3d = options.chart.options3d,
      alpha = options3d.alpha,
      beta = options3d.beta,
      z = seriesOptions.stacking ? (seriesOptions.stack || 0) * depth : series._i * depth;
    z += depth / 2;
    if (seriesOptions.grouping !== false) {
      z = 0;
    }
    each(series.data, function(point) {
      var shapeArgs = point.shapeArgs,
        angle;
      point.shapeType = 'arc3d';
      var ran = point.options.h;
      shapeArgs.z = z;
      shapeArgs.depth = depth * 0.75 + ran;
      shapeArgs.alpha = alpha;
      shapeArgs.beta = beta;
      shapeArgs.center = series.center;
      shapeArgs.ran = ran;
      angle = (shapeArgs.end + shapeArgs.start) / 2;
      point.slicedTranslation = {
        translateX: round(cos(angle) * seriesOptions.slicedOffset * cos(alpha * deg2rad)),
        translateY: round(sin(angle) * seriesOptions.slicedOffset * cos(alpha * deg2rad)),
      };
    });
  });
  (function(H) {
    H.wrap(highcharts.SVGRenderer.prototype, 'arc3dPath', function(proceed) {
      // Run original proceed method
      var ret = proceed.apply(this, [].slice.call(arguments, 1));
      ret.zTop = (ret.zOut + 0.5) / 100;
      return ret;
    });
  })(highcharts);

  // 生成不同高度的3d饼图
  var chart = highcharts.chart(id, {
    chart: {
      type: 'pie',
      animation: false,
      backgroundColor: 'rgba(0, 0, 0, 0)', // 不显示背景色
      events: {
        load: function() {
          console.log('ecah  hight');
          var each = highcharts.each,
            points = this.series[0].points;
          each(points, function(p) {
            p.graphic.attr({
              translateY: -p.shapeArgs.ran,
            });
            p.graphic.side1.attr({
              translateY: -p.shapeArgs.ran,
            });
            p.graphic.side2.attr({
              translateY: -p.shapeArgs.ran,
            });
          });

          // 轮播显示提示框
          var chart = this;
          var points = chart.series[0].points;
          var len = points.length;
          var i = 0;
          var timer = null;
          timer && clearInterval(timer);
          timer = setInterval(function() {
            autoTooltip(points[i]);
            i++;
            if (i === len) {
              i = 0;
            }
          }, 3000);
        },
      },
      options3d: {
        enabled: true,
        alpha: 75,
        beta: 0,
      },
    },

    title: '',
    legend: {
      floating: true,
      align: 'center',
      verticalAlign: 'top',
      symbolHeight: 9,
      symbolWidth: 9,
      itemStyle: {
        fontWeight: 'normal',
      },
      useHTML: true,
      labelFormatter: function() {
        return (
          '<span style="color: #fff;margin-left: 10px; font-size:13px">' +
          this.name +
          '</span>' +
          '<span style="color: ' +
          colorArr[this.index] +
          ';">'
        );
      },
    },
    tooltip: {
      style: {
        //提示框内容样式
        color: '#ECF5FE',
        fontSize: '14px',
      },
      useHTML: true,
      backgroundColor: 'rgba(255, 255, 255, 0.8)',
      borderColor: 'rgba(0, 0, 0, 0)',
      borderRadius: 0,
      borderWidth: 0,
      shadow: false,
      formatter: function() {
        var point = this.point;
        return (
          '<div class="custom-tooltip">' +
          `<i style='background: ${point.color.stops[0]};'></i>` +
          point.name +
          ' <span>' +
          point.y +
          '</span>' +
          '<span>' +
          point.percentage.toFixed(0) +
          '%</span>' +
          '</div>'
        );
      },
    },
    plotOptions: {
      pie: {
        allowPointSelect: true, //每个扇块能否选中
        cursor: 'pointer', //鼠标指针
        center: ['50%', '50%'],
        showInLegend: true,
        size: '130%',
        innerSize: 0,
        depth: 35, //饼图的厚度
        dataLabels: {
          enabled: false, //是否显示饼图的线形tip
          formatter: function() {
            let name = this.point.name;
            let value = this.y;
            return name + value + '%';
          },
        },
      },
    },
    credits: {
      enabled: false,
    },
    series: [
      {
        type: 'pie',
        data: [
          {
            name: '紧急告警',
            y: 10,
            h: 10,
          },
          {
            name: '重要告警',
            y: 10,
            h: 10,
          },
          {
            name: '普通告警 ',
            y: 15,
            h: 15,
          },
          {
            name: '提示告警',
            y: 30,
            h: 25,
          },
        ],
      },
    ],
  });

  function autoTooltip(point) {
    chart.tooltip && chart.tooltip.refresh(point);
  }
}

export default function Pie3d() {
  useEffect(() => {
    getPie('pie3d');

    window.addEventListener('resize', () => {
      getPie('pie3d');
    });
  }, []);
  return <div id="pie3d" className="waring-pie" style={{ height: '100%' }} />;
}


        .custom-tooltip {
          padding: 10px;
          color: #ecf5fe;
          background-size: cover;
          border-radius: 5px;
          /* 其他需要的样式 */
          background: url('~@/assets/img/busiMonitorSys/pie-hover.png') left center/100% 100%
            no-repeat;
          i {
            display: inline-block;
            width: 9px;
            height: 9px;
            border-radius: 50%;
            margin-right: 6px;
          }
          span {
            color: #23fffc;
            font-weight: 600;
            margin-left: 12px;
          }
        }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1659903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享四种免费获取SSL的方式

SSL证书目前需要部署安装的网站很多&#xff0c;主要还是基于国内目前对证书的需求度在不断的升高&#xff0c;网站多了、服务器多了之后。网络安全问题就成为了大家不得不面对的一个重要的问题了。SSL证书的作用有很多&#xff0c;这里就不一一详述了&#xff0c;本期作品主要…

同一局域网内互传文件

1. 打开要共享的文件夹&#xff0c;然后在地址框内输入cmd 2. 弹出的命令框内输入python -m http.server &#xff08;这么就创建好了共享服务器&#xff09; 3.win R输入cmd运行 4.输入ipconfig找到IP地址 5.另一台同一局域网内的机子就可以在网页浏览器输入ip和端口号…

智能奶柜:健康生活新风尚

智能奶柜&#xff1a;健康生活新风尚 在快节奏的都市生活中&#xff0c;健康与便利成为了现代人的双重追求。而在这两者交汇之处&#xff0c;智能奶柜应运而生&#xff0c;它不仅是科技与生活的完美融合&#xff0c;更是日常营养补给的智慧之选。 清晨的第一缕温暖 —— 新鲜…

谷歌上架,白包号放着备用,啥也没干也被封?是什么情况?

众所周知&#xff0c;Google Play Store是全球最大的应用商店之一&#xff0c;每天都有大量的应用被上传和下架。 同时&#xff0c;随着谷歌上架行业的发展&#xff0c;谷歌现在的审核系统越来越智能和先进&#xff0c;开发者们尝试着各种方法来提高上架成功率。其中&#xff…

TCP及IP协议

TCP协议的传输是可靠的&#xff0c;而UDP协议的传输“尽力而为” TCP传输可靠性———确认&#xff0c;重传&#xff0c;排序&#xff0c;流控。 流控&#xff1a;滑动窗口机制 TTL--- 数据包每经过一个路由器的转发&#xff0c;他的TTL值将减1&#xff0c;当一个数据包中的T…

武汉星起航:五对一精细化服务助力合作伙伴开启亚马逊新篇章

武汉星起航电子商务有限公司以其专业的服务和独特的模式&#xff0c;为合作伙伴在亚马逊自营领域开拓了一片新天地。自2017年专注于亚马逊自营以来&#xff0c;武汉星起航不仅积累了丰富的经验&#xff0c;更在2020年成立了武汉星起航电子商务有限公司&#xff0c;进一步提升了…

文件夹名批量重命名:一键实现中文到意大利语的高效翻译!文件管理更高效!

文件夹管理成为了我们日常工作和生活中的重要一环。当文件夹名称繁杂且多样&#xff0c;尤其是涉及到不同语言时&#xff0c;如何快速、准确地批量重命名&#xff0c;成为了许多人的迫切需求。今天&#xff0c;我们就来聊聊如何轻松实现文件夹名从中文到意大利语的批量翻译&…

计算机网络学习记录 网络的大概认识 Day1

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 计算机网络学习记录Day1 本文基于1.1 计算机网络在信息…

Spring底层入门(十)

1、内嵌tomcat boot框架是默认内嵌tomcat的&#xff0c;不需要手动安装和配置外部的 Servlet 容器。 简单的介绍一下tomcat服务器的构成&#xff1a; Catalina&#xff1a; Catalina 是 Tomcat 的核心组件&#xff0c;负责处理 HTTP 请求、响应以及管理 Servlet 生命周期。它包…

机器人学【一、刚体运动】

机器人学 文章目录 机器人学1. 刚体运动1.1 刚体变换刚体刚体变换 1.2 三维空间中的旋转运动群求质点坐标的相对变换旋转矩阵的合成法则用线性算子来计算叉积叉积的右手法则叉积用于计算线速度旋转的指数坐标Rodrigues公式计算旋转矩阵的例子四元数 1.3 三维空间中的刚体运动齐…

人人都是开发者?Baidu Comate智能代码助手改变你传统的编程之路

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引入一、人人都是开发者二、Baidu Comate 智能编码助手2.1 Baidu Comate 是什么&#xff1f;2.2 Baidu Comate 支持那…

DDD面试题:DDD聚合和表的对应关系是什么 ?(来自蚂蚁面试)

尼恩说在前面&#xff1a; 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如字节、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; DDD 的外部接口调用&#xff0c;应该放在…

idea护眼主题推荐

idea是一个非常好用的开发工具&#xff0c;程序员们天天都与它打交道&#xff0c;最近写代码眼睛的了干眼症&#xff0c;对屏幕特别敏感&#xff0c;所以关注了下主题相关的内容&#xff0c;jetbrains官方也有主题市场插件&#xff1a;https://plugins.jetbrains.com/search?t…

IDEA终端环境配置

Idea如何配置终端&#xff1b; 第一步&#xff1a;找到我的电脑&#xff0c;右击——属性——高级系统设置——环境变量 先配置path: 在后面加入&#xff1a;C:\Program Files (x86)\Java\jdk1.7.0_75\bin&#xff08;每个人放置jdk的位置不同。&#xff09; 新建classpath:…

【比邻智选】MR880A模组

&#x1f680;高性价比&#xff0c;5G/4G双模&#xff0c;稳定可靠 &#x1f310;功能丰富&#xff0c;5G特性一应俱全 &#x1f9e9;多封装兼容&#xff0c;适配性强&#xff0c;灵活升级智能设备

照片文件夹惊变白板?揭秘背后的原因及恢复秘籍

我们生活在一个数字化时代&#xff0c;照片已经成为记录生活的重要方式。然而&#xff0c;当你兴冲冲地打开保存珍贵记忆的文件夹时&#xff0c;却发现里面的照片全都变成了白板&#xff0c;这种心情无异于晴天霹雳。那么&#xff0c;这究竟是怎么回事呢&#xff1f; 照片文件夹…

基于springboot + vue 实现的简易博客系统

项目效果图 登陆页面 文章列表 发表文章 用户管理 栏目管理 数据统计 后端技术栈后端主要采用了&#xff1a; 1.SpringBoot 2.SpringSecurity 3.MyBatis 4.部分接口遵循Restful风格 5.MySQL 前端技术栈前端主要采用了&#xff1a; 1.Vue 2.axios 3.Elemen…

接口自动化框架篇:接口框架中的日志记录封装!

接口自动化框架中的日志记录是一个重要的环节&#xff0c;它能帮助我们追踪接口的执行情况、调试问题、分析测试结果等。通过规范的日志记录&#xff0c;我们可以更好地管理和维护接口自动化测试代码。 以下是一个从0到1的详细规范&#xff0c;来进行接口框架中的日志记录封装…

SalFAU-Net:显著性目标检测的显著性融合注意U-Net

SalFAU-Net:显著性目标检测的显著性融合注意U-Net 摘要IntroductionRelated Works SalFAU-Net: Saliency Fusion Attention U-Net for Salient Object Detection 摘要 显著目标检测&#xff08;SOD&#xff09;在计算机视觉中仍然是一个重要的任务&#xff0c;其应用范围从图像…

2024数维杯B题完整思路24页+配套代码1-4问+可视化结果图

后续参考论文也会进行一个更新 2024年数维杯数学建模B题主要关注生物质和煤共热解问题的研究 点击链接加入群聊【2024数维杯数学建模ABC题资料汇总】&#xff1a; 2024数维杯B题完整思路18页1-5问配套代码后续参考论文https://www.jdmm.cc/file/2710636 该段文字的第一个问题…