Ecahrts横向柱状图自动滚动

news2024/12/23 14:17:37

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>

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

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

相关文章

植物大战僵尸杂交版 MacBook 苹果电脑下载安装详细教程

最近老是看到别人玩植物大战僵尸杂交版&#xff0c;可是找了一圈发现都是PC版本的&#xff0c;原来游戏作者只做了一个PC版本&#xff0c;还好最终没有放弃终于在 Mac 上安装上了植物大战僵尸杂交版 版本是 2.0.88 真的蛮好玩的就是关卡有亿点点难&#xff0c;我最爱玩无尽模式…

四川赤橙宏海商务信息咨询有限公司靠谱吗?

在数字化浪潮席卷而来的今天&#xff0c;电商行业正经历着前所未有的变革。四川赤橙宏海商务信息咨询有限公司&#xff0c;凭借其深厚的行业经验和敏锐的市场洞察力&#xff0c;专注于抖音电商服务领域&#xff0c;致力于为广大商家提供全方位、高效益的电商解决方案。 赤橙宏…

闪烁圆点加载动画

效果图: 完整代码: <!DOCTYPE html> <html> <head><meta charset="UTF-8" /><title>闪烁圆点加载动画</title><style type="text/css">body {background: #ECF0F1;display: flex;justify-content: center;al…

Linux部署mysql8.0.28数据库

目录 1.基础准备 (1)首先去官网下载二进制安装包 (2)下载好之后上传至服务器 (3)禁用关闭selinux和防火墙 (4)挂载光盘搭建本地yum仓库 2.解压到指定目录 3.检查系统是否安装mariadb 4.安装MySQL数据库 (1)进入MySQL目录 看到‘完毕’就说面mysql已经安装成功了 4.初…

易基因:【表观遗传学基础】如何研究DNA甲基化

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 表观遗传学近几年取得的一系列研究进展&#xff0c;确实吸引着越来越多的关注&#xff01;为了帮大伙儿梳理一下表观遗传学的基本概念和研究方法&#xff0c;小编打算开一个系列专题&…

设备物联网关在实际生产中的作用解析-天拓四方

随着物联网技术的迅猛发展&#xff0c;设备物联网关作为连接物理世界与数字世界的核心组件&#xff0c;其应用已经渗透到工业、农业、医疗等多个领域。本案例将聚焦于设备物联网关在某制造企业中的应用&#xff0c;详细解析其在实际生产中的重要作用。 案例背景 某制造企业面…

wms海外仓系统重要吗?对小型海外仓有哪些好处

虽然小型海外仓本身的体量不大&#xff0c;但是在面对激烈的竞争和日益复杂的客户需求面前&#xff0c;要想赢得一席之地&#xff0c;wms海外仓系统还是一个非常必要的工具的。 对于小型海外仓来说&#xff0c;面对的业务复杂度其实并不比大型海外仓小&#xff0c;甚至更大。 …

高精度定位技术的必要性与实际应用

在当今社会&#xff0c;随着科技的飞速发展&#xff0c;高精度精准定位技术已成为一项不可或缺的基础技术&#xff0c;其应用范围涉及军事、航空、智能交通、无人驾驶、智慧城市建设等众多领域。高精度精准定位不仅为人们的日常生活带来极大便利&#xff0c;还对提升国家的科技…

Docker Hub无法访问,DBdoctor的应对之策

近期我们收到很多小伙伴的咨询&#xff1a;Docker Hub无法访问&#xff0c;DBdoctor该如何下载安装呢?本文我们将详细给大家介绍DBdoctor的多种部署方式&#xff0c;以及如何快速下载以及安装部署DBdoctor。 DBdoctor部署架构 首先我们来看下DBdoctor的部署架构&#xff0c;…

TikTok引领小众文化与亚文化:崛起与融合的新舞台

近年来&#xff0c;TikTok已经成为全球最受欢迎的社交媒体平台之一。其独特的短视频格式和强大的算法推荐系统&#xff0c;使得各种内容能够迅速传播并吸引大量观众。TikTok不仅为主流文化提供了展示平台&#xff0c;更为各种小众文化和亚文化提供了前所未有的展示机会。本文No…

推荐丨怎么才能让网站实现HTTPS访问?

网站实现HTTPS访问主要包括以下几个步骤&#xff1a; 一、选择并获取SSL证书 确定证书类型&#xff1a;根据网站的需求和预算&#xff0c;选择合适的SSL证书类型&#xff0c;如域名验证&#xff08;DV&#xff09;、组织验证&#xff08;OV&#xff09;或扩展验证&#xff08…

英语常用的英语句型,柯桥成人英语培训

句型1&#xff1a;There&#xff0b;be &#xff0b;主语&#xff0b;地点状语/ 时间状语 There’s a boat in the river. 河里有条船. 句型2&#xff1a;What’s wrong with&#xff0b;sb. / sth. &#xff1f; What’s wrong with your watch&#xff1f;你的手表有什么毛病…

虚拟化 之四 详解 jailhouse 使能和创建 Cell 的工作流程

完整的 Jailhouse 组件主要由内核模块(jailhouse.ko)、虚拟机管理程序固件(jailhouse*.bin)、管理工具(jailhouse 命令行程序及一些 Python 脚本)以及配置文件(.cell)这四部分组成。用户使用它们来启用虚拟机管理程序、创建 Cell、加载 inmate 二进制文件以及运行和停止…

Kong AI Gateway 正式 GA !

Kong Gateway 3.7 版本已经重磅上线&#xff0c;我们给 AI Gateway 带来了一系列升级&#xff0c;下面是 AI Gateway 的更新亮点一览。 AI Gateway 正式 GA 在 Kong Gateway 的最新版本 3.7 中&#xff0c;我们正式宣布 Kong AI Gateway 达到了通用可用性&#xff08;GA&…

Ubuntu22.04之有道词典无法画词翻译替代方案(二百四十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

NVIDIA DeepStream SDK 说明及链接

NVIDIA DeepStream SDK DeepStream 的多平台支持为您提供了一种更快、更简单的方式来开发视觉AI应用程序和服务。您甚至可以在本地、边缘和云中部署它们&#xff0c;只需单击一个按钮。 开始 在Launchpad上试用 什么是 NVIDIA DeepStream&#xff1f; NVIDIA 的 DeepStream …

蚂蚁集团:2023年科研投入211.9亿元

6月13日&#xff0c;蚂蚁集团发布2023年可持续发展报告。报告显示&#xff0c;2023年蚂蚁集团科研投入达到211.9亿元&#xff0c;再创历史新高&#xff0c;蚂蚁科技投入的重点是人工智能和数据要素技术。 蚂蚁集团董事长兼CEO井贤栋在报告致辞中说&#xff0c;面向未来&#x…

JasperReport-合并单元格

合并单元格是做报表时经常会遇到的需求。下面列举两种合并单元格的方式。 一、示例一 合并单元格在Subject。 1.1 创建5列的表 1.2 合并Column4和 Column5 按住Ctrl键点击Column4和 Column5,同时选中。然后右键,选择“Group Columns”。 1.3 合并成功 二、示例二 示例一…

信息收集---网站目录和CMS指纹识别

一. 网站目录收集 1. 常见网站敏感文件 网站的备份文件/数据库备份文件 wwwroot.zip Db.zip 后台登陆的目录 manage login 安装包&#xff08;源码&#xff09; 上传的目录uploads mysql的管理界面 phpmyadmin 程序的安装路径 2. Dirb 工具 工具介绍 dirb 是一款用…

端点物联开发教程之(二)开发演示

目录 一、产品定义 二、基础资源下载 三、嵌入式端开发 3.1 工程搭建 3.2 模型文件修改 3.3 头文件定义 3.4 模型功能开发 3.5 mqtt应用层配置 3.6启动任务 四、用户后端开发 4.1 功能分析 4.2 创建模型文件 4.3 添加基础功能 4.4 数据更新 4.5 阈值设置 4.6 模…