Ecahrts横向柱状图自动滚动

1.定义一个定时器标识

let timer: NodeJS.Timer; // 定时器

2.定义展示的数据的条数

const dataZoomEndValue = 5; // 数据窗口范围的结束数值(一次性展示几个)

3.设置datazoom的相关参数

dataZoom: [
	{
		show: false, // 是否显示滑动条
		xAxisIndex: 0, // 表示从X轴的零刻度线开始的
		startValue: 0, // 数据窗口范围的起始数值
		endValue: dataZoomEndValue // 数据窗口范围的结束数值(一次性展示几个)
	}
],

4.定义开始动画定时器和结束动画定时器的两个函数

// 鼠标移入echarts图表暂停动画
const stopAnimation = () => {
	clearInterval(timer);
};
// 鼠标移出echarts图表开始动画
const startAnimation = (myChart: echarts.ECharts, option: any, Xdata: Array<string>, dataZoomEndValue: number) => {
	timer = setInterval(() => {
		// 每次向后滚动一个,最后一个从头开始
		if (option.dataZoom[0].endValue === Xdata.length - 1) {
			option.dataZoom[0].startValue = 0; // 数据窗口范围的起始数值
			option.dataZoom[0].endValue = dataZoomEndValue; // 数据窗口范围的结束数值
		} else {
			option.dataZoom[0].startValue = option.dataZoom[0].startValue + 1; // 数据窗口范围的起始数值
			option.dataZoom[0].endValue = option.dataZoom[0].endValue + 1; // 数据窗口范围的结束数值
		}
		myChart.setOption(option);
	}, 2000);
};

5.开启定时器动画,以及鼠标移入移除ecahrts暂停和开始动画效果

if (Xdata.length > 0) {
	startAnimation(myChart, option, Xdata, dataZoomEndValue);
}
// 给echarts图表绑定鼠标移入移除事件
myChart.on("mouseover", function () {
	stopAnimation();
});
myChart.on("mouseout", function () {
	startAnimation(myChart, option, Xdata, dataZoomEndValue);
});

6.最后别忘了清除定时器

onUnmounted(() => {
	stopAnimation();
});

附上完整代码

<template>
	<div class="h-250px" style="width: 100%" ref="pieChart"></div>
</template>

<script lang="ts" setup>
import { watch, ref, onMounted, onUnmounted } from "vue";
import * as echarts from "echarts";
import { useEcharts } from "@/hooks/useEcharts";
const pieChart = ref();
const props = defineProps({
	data: {
		type: Object,
		default: () => {}
	}
});
watch(
	() => props.data,
	() => {
		initPieChart();
	},
	{
		deep: true
	}
);
let timer: NodeJS.Timer; // 定时器
// 鼠标移入echarts图表暂停动画
const stopAnimation = () => {
	clearInterval(timer);
};
// 鼠标移出echarts图表开始动画
const startAnimation = (myChart: echarts.ECharts, option: any, Xdata: Array<string>, dataZoomEndValue: number) => {
	timer = setInterval(() => {
		// 每次向后滚动一个,最后一个从头开始
		if (option.dataZoom[0].endValue === Xdata.length - 1) {
			option.dataZoom[0].startValue = 0; // 数据窗口范围的起始数值
			option.dataZoom[0].endValue = dataZoomEndValue; // 数据窗口范围的结束数值
		} else {
			option.dataZoom[0].startValue = option.dataZoom[0].startValue + 1; // 数据窗口范围的起始数值
			option.dataZoom[0].endValue = option.dataZoom[0].endValue + 1; // 数据窗口范围的结束数值
		}
		myChart.setOption(option);
	}, 2000);
};
const initPieChart = () => {
	// 判断当前echarts是否存在
	let myChart = echarts.getInstanceByDom(pieChart.value);
	if (myChart == null) {
		myChart = echarts.init(pieChart.value);
	}
	let Xdata = ["机台号1", "机台号2", "机台号3", "机台号4", "机台号5", "机台号6", "机台号7", "机台号8", "机台号9", "机台号10"];
	const dataZoomEndValue = 5; // 数据窗口范围的结束数值(一次性展示几个)

	const option = {
		grid: {
			top: "20%",
			left: "4%",
			right: "4%",
			bottom: "2%",
			containLabel: true
		},
		dataZoom: [
			{
				show: false, // 是否显示滑动条
				xAxisIndex: 0, // 表示从X轴的零刻度线开始的
				startValue: 0, // 数据窗口范围的起始数值
				endValue: dataZoomEndValue // 数据窗口范围的结束数值(一次性展示几个)
			}
		],
		tooltip: {
			trigger: "axis",
			axisPointer: {
				// 坐标轴指示器,坐标轴触发有效
				type: "shadow" // 默认为直线,可选为:'line' | 'shadow'
			},
			formatter: function (params: any) {
				let text = `${params[0].name}<br/>`;
				params.forEach((item: any, index: number) => {
					text += `<span style="width: 10px;height: 10px;background: ${item.color};border-radius: 10px;display: inline-block;margin-right: 5px;"></span>${params[index].seriesName}:${item.value}分钟<br/>`;
				});
				return text;
			}
		},
		legend: {
			itemGap: 15,
			top: "0",
			right: "30",
			textStyle: {
				color: "#B5C5D4"
			},
			data: ["保养", "落纱", "故障", "其他"]
		},
		xAxis: {
			type: "category",
			axisLine: {
				lineStyle: { color: "#8693a4", width: 1 }
			},
			axisTick: {
				show: false
			},
			axisLabel: {
				interval: 0, //设置文本标签全部显示
				rotate: 30 //如果内容重叠最好设置一下旋转,就不会重叠了
			},
			data: Xdata
		},
		yAxis: {
			type: "value",
			name: "时长:min",
			axisLabel: {
				show: true,
				color: "#8693a4"
			},
			splitLine: {
				lineStyle: {
					width: 1,
					color: "#2d364e",
					type: "dashed"
				}
			}
		},
		series: [
			{
				name: "保养",
				type: "bar",
				stack: "总量",
				barMaxWidth: 20,
				data: [320, 302, 301, 334, 390, 330, 320, 290, 310, 180, 180]
			},
			{
				name: "落纱",
				type: "bar",
				stack: "总量",
				barMaxWidth: 20,
				data: [120, 132, 101, 134, 90, 230, 210, 260, 210, 110, 130]
			},
			{
				name: "故障",
				type: "bar",
				barMaxWidth: 20,
				stack: "总量",
				data: [220, 182, 191, 234, 290, 330, 310, 200, 110, 150, 270]
			},
			{
				name: "其他",
				type: "bar",
				barMaxWidth: 20,
				stack: "总量",
				data: [150, 212, 201, 154, 190, 330, 410, 220, 360, 160, 220]
			}
		]
	};

	useEcharts(myChart, option); // 开启定时器自动滚动
	if (Xdata.length > 0) {
		startAnimation(myChart, option, Xdata, dataZoomEndValue);
	}
	// 给echarts图表绑定鼠标移入移除事件
	myChart.on("mouseover", function () {
		stopAnimation();
	});
	myChart.on("mouseout", function () {
		startAnimation(myChart, option, Xdata, dataZoomEndValue);
	});
};
onMounted(() => {
	initPieChart();
});
onUnmounted(() => {
	stopAnimation();
});
</script>

<style lang="scss" scoped></style>

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

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

相关文章

香橙派 AIpro 评测与使用心得

引言 香橙派 AIpro&#xff08;OrangePi AIpro&#xff09;是一款尺寸小巧却功能强大的AI边缘设备&#xff0c;其仅有107*68mm的超小尺寸使得它在各种场景下都能轻松部署。它支持两种流行的操作系统&#xff0c;包括Ubuntu和openEuler&#xff0c;为用户提供了更多的选择和灵活…

Windows同一文件夹下支持大小写同名文件

举例&#xff1a;同一文件目录下需要存在A.java, a.java, Windows是不支持的&#xff0c;这时候需要建一个Linux子系统的文件夹 创建教程 1、在启用或关闭Windows功能下面找到 适用于Linux系统的Windows子系统 2、cmd 执行命令 fsutil file SetCaseSensitiveInfo 文件夹路径 …

新注册与新核准有什么区别?在哪可以找到新注册新核准的企业名单?

新注册&#xff1a;指的是公司刚刚完成工商注册登记&#xff0c;成为法律意义的经营实体。 新核准&#xff1a;指的是企业通过证券监管机构的审核&#xff0c;获得公开发行股票或债券的资格。 注册主要关注企业的基本资质和合规性&#xff0c;而核准是已经注册的公司进行财务…

【React】如何使用npm run start命令运行两个服务

我们开发前端项目时&#xff0c;有时候需要本地 mock 数据&#xff0c;这样就需要启动两个服务&#xff0c;一个是接口服务&#xff0c;一个是前端项目。可以安装一个插件来帮助我们通过一个命令启动两个服务。 方法一 添加& npm run server 注意&#xff1a;Windows系统…

人脸匹配——OpenCV

人脸匹配 导入所需的库加载dlib的人脸识别模型和面部检测器读取图片并转换为灰度图比较两张人脸选择图片并显示结果比较图片创建GUI界面运行GUI主循环运行显示全部代码 导入所需的库 cv2&#xff1a;OpenCV库&#xff0c;用于图像处理。 dlib&#xff1a;一个机器学习库&#x…

用Python绘制yolo训练结果比较图-论文需要

代码内容来自于网络用博客记录 利用训练生成的result.csv中数据&#xff0c;形成多模型的比较图。 代码中演示的是map50、map50-95、losss的比较图 import matplotlib.pyplot as plt import pandas as pd import numpy as npif __name__ __main__:# 列出待获取数据内容的…

webstorm自定义vue模板

<!--* Description: ${COMPONENT_NAME} 页面* Author: * Date: ${DATE} --> <template><div>${COMPONENT_NAME} </div> </template><script> export default {name: "${COMPONENT_NAME}",components: {},data() {return {};},co…

【数据结构】单链表(C语言)

在数据结构和算法中&#xff0c;链表是一种常见的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含数据和指向下一个节点的指针。在C语言中&#xff0c;我们可以使用指针来实现单向链表。下面将详细讲述如何利用C语言实现单向链表。 1.单链表的概念和结构 概…

Yolo-World训练过程中使用wandb进行可视化

训练过程可视化有两种方式&#xff1a;wandb和tensorboard&#xff0c;这里我采用的是wandb&#xff0c;想要在训练过程中调用wandb只需要在要训练的配置文件&#xff08;如yolo_world_v2_l_vlpan_bn_sgd_1e-3_40e_8gpus_finetune_coco.py&#xff09;中加上一行代码即可&#…

美业门店管理系统Java源码分享-【库存管理】的功能和作用

美业收银系统在美容行业中的作用和重要性体现在提高管理效率、提升客户满意度、降低成本、促进业务增长等方面。它为连锁美业提供了一个全面的管理工具&#xff0c;能够更好地应对市场挑战&#xff0c;提升竞争力。 美业系统中的【库存管理】在整个美容行业中起着非常重要的作…

【机器学习】以DIFY为例分享一种使用dockerhub镜像的方法

目录 一、引言 二、Dify在dockerhub被禁用后&#xff0c;如何部署、升级 2.1 网络及硬件条件 2.2 docker部署、升级方案 三、总结 一、引言 关于dify&#xff0c;之前力推过&#xff0c;大家可以跳转 AI智能体研发之路-工程篇&#xff08;二&#xff09;&#xff1a;Dify…

LayUI使用(二)处理表格会出现下拉框的问题

一、问题描述 如下&#xff0c;layui的表格渲染后&#xff0c;当鼠标悬停在表格项时会出现右侧的下拉框&#xff0c;layui版本较老&#xff0c;原因未知 二、处理办法 在cols里面加上width&#xff0c;也不用每个都加&#xff0c;加一部分表格项即可 注意&#xff1a;若想禁止…

18. 四数之和 - 力扣

1. 题目 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; 0 …

# RocketMQ 实战:模拟电商网站场景综合案例(十一)

RocketMQ 实战&#xff1a;模拟电商网站场景综合案例&#xff08;十一&#xff09; 一、RocketMQ 实战&#xff1a;模拟电商网站场景综合案例-- web 端项目开发 1、在 shop-order-web 工程模块中&#xff0c;创建 Controller 类 OrderControllre.java /*** shop\shop-order…

ABB光纤控制单元NDBU-95 64008366D

ABB光纤控制单元NDBU-95 64008366D 控制单元&#xff08;Control Unit&#xff09;负责程序的流程管理。正如工厂的物流分配部门&#xff0c;控制单元是整个CPU的指挥控制中心&#xff0c;由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和操作控制…

easyexcel的简单使用(execl模板导出)

模板支持功能点 支持列表支持自定义头名称支持自定义fileName支持汇总 模板示例 操作 pom引入 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${easyexcel.version}</version></dep…

【Python】教你彻底了解Python中的数据科学与机器学习

​​​​ 文章目录 一、数据科学的基本概念1. 数据收集2. 数据清洗3. 数据分析4. 数据可视化5. 机器学习 二、常用的数据科学库1. Pandas1.1 创建Series和DataFrame1.2 数据操作 2. NumPy2.1 创建数组2.2 数组操作 3. Scikit-learn3.1 数据预处理3.2 特征工程 三、数据预处理与…

力扣每日一题 6/13 反悔贪心算法

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 2813.子序列最大优雅度【困难】 题目&#xff1a; 给你一个长度为 n 的二…

vue技巧(十)全局配置使用(打包后可修改配置文件)

1、背景 vue打包目前主流用的有webpack和vite两种&#xff0c;默认用的webpack。&#xff08;二者的区别大家可以各自上网查&#xff0c;我没用过vite&#xff0c;所以不过多介绍&#xff09;vue通过webpack打包后&#xff0c;源码会被压缩&#xff0c;但一些关键配置可…

Redis高级特性和应用:慢查询、Pipeline、事务、Lua

Redis提供了许多高级特性&#xff0c;可以帮助优化和管理系统性能。本文将介绍Redis的慢查询、Pipeline、事务和Lua脚本的使用及其相关配置。 Redis的慢查询 慢查询日志是开发和运维人员定位系统慢操作的重要工具。Redis也提供了类似的功能&#xff0c;通过记录超过预设阀值的…