Highcharts 实现3D饼图 tooltip轮播

在这里插入图片描述
实现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.mfbz.cn/a/610567.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker安装达梦数据库

1.确保已安装Docker 可参考&#xff1a;Linux安装Docker-CSDN博客 2.上传dm镜像并导入安装包 可以从&#xff1a;产品下载 | 达梦数据库下载dm镜像&#xff0c;如下图&#xff1a; docker load -i dm8_20230808.tar 3.导入后查看镜像 docker images 4.启动容器 docker run …

工业数据采集软件 高效的数字化信息管理系统

近年来&#xff0c;随着产线自动化程度的提升&#xff0c;越来越多的工业设备被运用到自动化生产中&#xff0c;产线中各位置所产生的数据也越来越多&#xff0c;每个设备又都是独立的&#xff0c;如何将其整合&#xff0c;进行系统化查看处理&#xff0c;就是工业数据采集软件…

数据结构05:树与二叉树 习题01[C++]

考研笔记整理&#xff0c;本篇作为树与二叉树的基本概念习题&#xff0c;供小伙伴们参考~&#x1f95d;&#x1f95d; 之前的博文链接在此&#xff1a;数据结构05&#xff1a;树与二叉树[C]-CSDN博客~&#x1f95d;&#x1f95d; 第1版&#xff1a;王道书的课后习题~&#x1…

有什么方便实用的黏土特效教程?6个软件教你快速进行特效制作

有什么方便实用的黏土特效教程&#xff1f;6个软件教你快速进行特效制作 作为时尚小达人&#xff0c;你自己是否想要制作出属于自己的黏土特效照片呢&#xff1f;比如下面几种。 看到这些黏土特效软件有没有心动&#xff0c;下面我也为大家详细的介绍一下可以制作出对应特效的…

金石传拓非遗研学基地 入驻蔚蓝书店

好消息&#xff01;&#xff01;&#xff01; 金石传拓非遗研学基地&#xff0c;正式入驻蔚蓝书店啦&#xff01;&#xff01;&#xff01; “缣竹易销&#xff0c;金石难灭&#xff0c;托以高山&#xff0c;永留不绝。”“金”指的是三代青铜器上的铭文。 “石”指的是石刻、…

视频号小店应该如何开店呢?详细的开店流程分享给你!

大家好&#xff0c;我是电商小V 视频号小店就是威信视频号团队为咱们商家提供的卖货平台&#xff0c;可以说是支持咱们商家在视频号场景中开店进行经营的模式&#xff0c; 视频号大概的开店流程那就是&#xff1a;找到视频号开店&#xff0c;选择企业入驻&#xff0c;填写信息&…

win7安装camera raw13.0.2详解。

首先win7是不能直接安装camera raw13.0.2的。所以我安装的是camera raw12版本。 然后就是重点了&#xff0c;打开文件C:\Program Files\Common Files\Adobe\Plug-Ins\CC\File Formats&#xff0c; 复制下载的camera raw13.0.2的8bi文件。 替换 这样就能在window7中使用了。网…

LinkedList链表

LinkedList 的全面说明 LinkList底层实现了双向链表和双端队列特点可以添加任意元素&#xff08;元素可以重复&#xff09;&#xff0c;包括null线程不安全&#xff0c;没有实现同步 LinkedList 的底层操作机制 LinkedList底层维护了一个双向链表LinkList中维护了两个属性fi…

学习javascript,实现一个简易售卖机的功能

有同学提问&#xff0c;说想实现一个JS售卖机的功能&#xff0c;我觉得这个挺有意思的&#xff0c;正是初学者学习JS&#xff0c;锻炼软件开发思维的一个好题目&#xff0c;所以就实现了一下&#xff0c;希望可以有帮助。 目录 1 需求分析 2 开发实现 2.1 商家端录入 2.2…

Linux中的fork与进程地址空间

目录 前言 一、进程地址空间 二、fork的值返回 三、高清图链接 总结 前言 在博主的《进程状态解析》一文中&#xff0c;在讨论进程创建时&#xff0c;提到了一个系统调用接口fork&#xff0c;它在使用过程中表现出对于父子进程不一致的返回结果&#xff0c;而且似乎还具有…

深入学习指针2

前言 hello,我又来了&#xff0c;今天有我继续带领大家深入的学习指针&#xff0c;通过上次的学习&#xff0c;我们已经了解到了指针的基本概念&#xff0c;指针如何使用&#xff0c;指针使用的益处&#xff0c;以及一些相关的概念&#xff0c;那今天我们就继续深入的学习&am…

Docker笔记(七)使用Docker部署Spring Boot项目

本文介绍如何使用Docker打包并部署Spring Boot多模块项目。 其中本文涉及的Docker的私库是用Nexus3搭建的。 使用Docker部署Spring Boot项目有三种方式 &#xff08;1&#xff09;使用 spring-boot-maven-plugin内置的build-image. &#xff08;2&#xff09;使用 Google 的 j…

STM32CubeMX软件使用(超详细)

1、Cube启动页介绍 2、芯片选择页面介绍 3、输入自己的芯片型号&#xff0c;这里以STM32U575RIT6举例 4、芯片配置页码介绍 5、芯片外设配置栏详细说明 6、点击ClockConfiguration进行时钟树的配置&#xff0c;选择时钟树后可以选择自己想使用的时钟源&#xff0c;也可以直接输…

MySQL数据库——基础事务操作-BEGIN-COMMIT-ROLLBACK

DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,createDate datetime DEFAULT NULL,userName varchar(20) DEFAULT NULL,pwd varchar(36) DEFAULT NULL,phone varchar(11) DEFAULT NULL,age tinyint(3) unsigned DEFAULT NULL,sex char(2) DEFAU…

MySQL企业级开发重点之事物和索引

事物 -- 解散学工部 delete from tb_dept where id 1;-- 删除部门下的员工 delete from tb_emp where dept_id 1; 介绍和操作 我们应该将两个语句写成一个语句 -- 开启事物 start transaction ;-- 解散学工部 delete from tb_dept where id 3;-- 删除部门下的员工 delete fr…

Word页脚设置“第X页共X页”的方法【域实现】

Word页脚设置“第X页共X页”的方法【域实现】 在设置Word页码格式的要求中&#xff0c;有时需要设置为“第X页共X页”这种格式&#xff0c;使用Word中的域功能可实现&#xff0c;同时&#xff0c;在某些情况下&#xff0c;可能还需要减去封面的页码&#xff0c;接下来为具体步…

传感器—超声波雷达

声波技术 在讲述超声波雷达之前&#xff0c;先了解一下声波的概念以及超声波和声波之间的关系 什么是声波&#xff1f; 声波是物体机械振动状态&#xff08;或能量&#xff09;的传播形式。所谓振动是指物质的质点在其平衡位置附近进行的往返运动形式&#xff0c;这种振动状…

JAVA文件的简单操作

文件IO&#xff08;Input和Output&#xff09; 文件的输入和输出是人为规定的&#xff0c;那么什么是输入&#xff1f;什么是输出捏&#xff1f;在这里统一已CPU为基准 例如&#xff1a;将文件由内存写入硬盘就是输出&#xff0c;有硬盘写入内存就是输入。可以总结为&#xff…

C语言—深入理解指针(3)

1.字符指针变量 一般使用&#xff1a; 另一种使用方法&#xff1a; “hello world”是一个常量字符串&#xff0c;不能被修改。 上述代码是将字符串中的首字符‘h’赋值给指针pstr&#xff0c;用%s打印字符串的时候&#xff0c;只需要提供首字符的地址就行。&#xff08;如果…

LoadRunner性能测试基本步骤

前言 本文旨在指导初学者使用LoadRunner进行基础的性能测试。 我们在接到一个性能测试任务的时候&#xff0c;需要从以下几点考虑&#xff1a;我们的测试对象是什么&#xff0c;测试要求是什么&#xff0c;测试环境怎么部署的&#xff0c;业务规模如何&#xff0c;哪些业务点是…
最新文章