当前位置: 首页 > news >正文

echarts饼图中心呈现一张图片,并且能动态旋转的效果react组件

实现效果:

父组件:

import React from 'react'
import styles from './style.less'
import GaugeChart from './GaugeChart';export default function index() {return (<div><div className={styles.bg} ></div><div style={{ width: '500px', height: '500px' }}><GaugeChart value={65.23} title="数据" /></div></div>)
}

子组件:

import React, { useEffect, useRef } from 'react';
import * as echarts from "echarts";
import totalBg from '@assets/images/icon1@2x.png';const MyChart = () => {const chartRef = useRef(null);const intervalIdRef = useRef(null); // 使用ref保存intervalIduseEffect(() => {const myChart = echarts.init(chartRef.current);const pieOption = {series: [{type: 'pie',radius: ['40%', '70%'],center: ['50%', '50%'],data: [{ value: 335, name: '直接访问' },{ value: 310, name: '邮件营销' },{ value: 234, name: '联盟广告' },{ value: 135, name: '视频广告' },{ value: 1548, name: '搜索引擎' }],itemStyle: {emphasis: {shadowBlur: 10,shadowOffsetX: 0,shadowColor: 'rgba(0, 0, 0, 0.5)'}}}]};myChart.setOption(pieOption);const timer = setTimeout(() => {const earthOption = {graphic: [{type: 'group',left: 'center',top: 'center',rotation: 0,rotationX: 0,rotationY: 0,children: [{type: 'image',style: {image: totalBg,width: 60,height: 60,shadowBlur: 20,shadowColor: 'rgba(0, 0, 0, 0.5)'},z: 10,zlevel: 10}]}]};myChart.setOption(earthOption);let rotationX = 0;let rotationY = 0;let rotationZ = 0;intervalIdRef.current = setInterval(() => {rotationX += 0.5;rotationY += 1;rotationZ += 0.5;// 检查图表实例是否已被销毁if (!myChart.isDisposed()) {myChart.setOption({graphic: [{type: 'group',left: 'center',top: 'center',rotation: rotationZ,rotationX: rotationX,rotationY: rotationY,children: [{type: 'image',style: {image: totalBg,width: 60,height: 60,shadowBlur: 20,shadowColor: 'rgba(0, 0, 0, 0.5)'},z: 10,zlevel: 10}]}]});}}, 100);}, 1000);return () => {// 清除定时器和超时clearTimeout(timer);if (intervalIdRef.current) {clearInterval(intervalIdRef.current);}// 销毁图表实例myChart.dispose();};}, []);return (<div ref={chartRef} style={{ width: '400px', height: '400px', perspective: '1000px' }} />);
};export default MyChart;

相关文章:

  • MATLAB 控制系统设计与仿真 - 35
  • YOLOv8 Bug 及解决方案汇总 【2024.1.24更新】【环境安装】【训练 断点续训】OMPError / KeyError
  • Linux根据 PID 进行性能分析
  • 【Spring Boot 源码学习】深入 ConfigurableEnvironment 的初始化过程
  • Android 13 关闭屏幕调节音量大小
  • Docker快速入门
  • yarn的定义
  • PyCharm Flask 使用 Tailwind CSS v3 配置
  • 软件工程中数据一致性的探讨
  • Spark两种运行模式与部署
  • 【ELF2学习板】Ne10进行FFT测试
  • 基于SpringBoot的新闻小程序开发与设计
  • 七牛使用任务工作流对音频进行转码
  • 项目管理基础---引言
  • 树莓派超全系列教程文档--(32)config.txt常用音频配置
  • 银行卡风险画像在社交行业网络安全的应用
  • 深入理解 React Hooks:简化状态管理与副作用处理
  • 【Test Test】灰度化和二值化处理图像
  • JAVA中多线程的经典案例
  • 2025.04.18|【Map】地图绘图技巧全解
  • 周继红连任中国跳水协会主席
  • 乍嘉苏改扩建项目迎来新进展!预应力管桩首件施工顺利完成
  • KZ队史首冠,透过春决看CF电竞张扬的生命力
  • 人民日报聚焦外贸“重镇”福建晋江:多元化布局扩大“朋友圈”
  • 全球在役最大火电厂被通报
  • 扫描类软件成泄密“推手”,网盘账号密码遭暴力破解