vue2动态横条图(横条图样式定时切换)

news2025/1/21 9:41:50

在这里插入图片描述

每次切换成新图后会清除定时器和图(重新加载,否则要么会重复加载定时器。清除定时器之后要先调用一次index为0的数据)
数据样例

acrossBarDatas:{
	data: ["80", "80"],
	sunffix: ['单位', "单位"],
	title: "标题",
	year: ["2025", "2030"]
}

调用代码 – 因为我同时调了4个 所以传了个id

<acrossBar
echartsId="acrossBar_echarts_1"
:echartsData="acrossBarDatas"
/>

组件代码 – 动态变化的柱子还可以用其他的img图去替换,修改makeOption(type, symbol, datas) symbol的值代表了图,注意type为bar设置symbol无效

<template>
	<div>
		<div class="acrossBar_echarts" :id="echartsId"></div>
	</div>
</template>
<script>
export default {
	name: '',
	components: {},
	mixins: [],
	props: ['echartsId', 'echartsData'],
	data() {
		return {
			myChart: null,
			intervalId: null,
			options: [], // 缓存生成的图表选项
			optionIndex: 0, // 当前选项的索引
		};
	},
	computed: {},
	watch: {
		echartsData: {
			handler(to) {
				if (to) {
					this.getEcharts(to);
				}
			},
		},
	},
	mounted() {
		this.getEcharts();
	},
	methods: {
		getEcharts() {
			// 清除之前的定时器
			if (this.intervalId) {
				clearInterval(this.intervalId);
				this.intervalId = null;
			}

			// 销毁之前的图表实例
			if (this.myChart) {
				this.myChart.dispose();
			}

			var chartDom = document.getElementById(this.echartsId);
			this.myChart = this.$echarts5.init(chartDom);

			if (this.echartsData) {
				// 提前生成并缓存图表选项
				this.options = [
					this.makeOption('pictorialBar', 'circle', this.echartsData),
					this.makeOption('bar', 'triangle', this.echartsData),
					this.makeOption(
						'pictorialBar',
						'diamond',
						this.echartsData
					),
				];

				// 立即应用第一个选项
				this.myChart.setOption(this.options[this.optionIndex]);

				// 设置定时器切换图表选项
				this.intervalId = setInterval(() => {
					this.optionIndex =
						(this.optionIndex + 1) % this.options.length;
					// this.myChart.clear(); // 清除之前的图表
					this.myChart.setOption(this.options[this.optionIndex]);
				}, 2500);
			}
		},
		makeOption(type, symbol, datas) {
			// console.log(echartsData, 'echartsData');
			const labelSetting = {
				show: true,
				position: 'right',
				offset: [10, 0],
				fontSize: 16,
			};
			let echartsData = datas;
			return {
				title: {
					text: echartsData.title,
					left: 'center',
					top: 10,
					textStyle: {
						color: '#333333',
						fontWeight: 400,
						fontSize: '15px',
					},
				},
				tooltip: {
					trigger: 'axis',
					axisPointer: {
						type: 'shadow',
					},
					formatter: function(params, index) {
						let param = params[0];
						return `${param.axisValue}年<br/>${param.marker}${param.seriesName}:${param.value}%`;
					},
				},
				grid: {
					containLabel: true,
					left: 10,
					right: 60,
					top: 30,
					bottom: 15,
				},
				xAxis: {
					type: 'value',
					position: 'bottom',
					axisTick: { show: false },
					axisLine: { show: false },
					splitLine: {
						lineStyle: {
							type: 'dashed',
						},
					},
				},
				yAxis: {
					type: 'category',
					color: ['red'],
					axisLine: { show: false },
					axisLabel: { show: true },
					axisTick: { show: false },
					splitLine: { show: false },
					data: echartsData.year,
				},
				animationDurationUpdate: 500,
				series: [
					{
						name: echartsData.title,
						type: type,
						barGap: '10%',
						label: labelSetting,
						symbolRepeat: true,
						symbolSize: ['80%', '60%'],
						barWidth: '50%',
						label: {
							show: true,
							position: 'right',
							color: 'rgba(51, 51, 51, 1)',
							formatter: function(params, index) {
								return (
									params.value +
									(echartsData.sunffix[params.dataIndex] ==
									null
										? ''
										: echartsData.sunffix[params.dataIndex])
								);
							},
						},
						universalTransition: {
							enabled: true,
							delay: function(idx, total) {
								return (idx / total) * 1000;
							},
						},
						data: [
							{
								value: echartsData.data[0],
								itemStyle: {
									color: 'rgba(195, 227, 138, 1)',
								},
								symbol: symbol,
							},
							{
								value: echartsData.data[1],
								itemStyle: {
									color: 'rgba(53, 163, 69, 1)',
								},
								symbol: symbol,
							},
						],
					},
				],
			};
		},
	},
};
</script>
<style lang="less" scoped>
.acrossBar_echarts {
	width: 416px;
	height: 195px;
}
</style>

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

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

相关文章

自然语言处理(NLP)—— 神经网络自然语言处理(Neural NLP)基础知识

1. 文章概览 本文是关于神经网络自然语言处理&#xff08;Neural NLP&#xff09;的概览&#xff0c;涵盖了基础原则、历史概览、处理流程、神经网络架构以及最近的训练范式。 1.1 基本原则 这部分会讲述自然语言处理&#xff08;NLP&#xff09;与神经网络在处理语言任务时遵…

Hbuilder无线连接手机

1.链接数据线进行操作 打开adbs所在位置 2.运行cmd 或者 powershell 3.运行项目

HTML静态网页成品作业(HTML+CSS)——企业摄影网介绍网页(3个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有3个页面。 二、作品演示 三、代…

vue3使用echarts简单教程~~概念篇

没写过 写着玩玩 不足的地方还望小伙伴补充~~ 概念篇 文档奉上&#xff1a;数据集 - 概念篇 - 使用手册 - Apache EChartshttps://echarts.apache.org/handbook/zh/concepts/dataset <template><div id"main" style"width: 600px; height: 400px&…

使用海康威视的SDK,利用WPF设计一个网络摄像头的显示控制程序(上位机)

目录 一、下载海康威视的SDK 1.1 关于SDK 1.2 关于API 1.3 关于DLL 1.4 下载海康威视的SDK 1.5 关于网络高清摄像机 二、对下载的SDK进行调试 三、利用Visual Studio打开项目的解决方案 3.1 Visual Studio 2022下载 3.2 关于句柄 四、打开WPF进行ui页面设计 4.1 关于…

Idea连接GitLab的过程以及创建在gitlab中创建用户和群组

上期讲述了如何部署GitLab以及修复bug&#xff0c;这期我们讲述&#xff0c;如何连接idea。 首先安装gitlab插件 下载安装idea上并重启 配置ssh免密登录 使用管理员打开命令行输入&#xff1a;ssh-keygen -t rsa -C xxxaaa.com 到用户目录下.ssh查看id_rsa.pub文件 打开复制…

【机器学习】第7章 集成学习(小重点,混之前章节出题但小题)

一、概念 1.集成学习&#xff0c;顾名思义&#xff0c;不是一个玩意&#xff0c;而是一堆玩意混合到一块。 &#xff08;1&#xff09;基本思想是先 生成一定数量基学习器&#xff0c;再采用集成策略 将这堆基学习器的预测结果组合起来&#xff0c;从而形成最终结论。 &#x…

【LinkedList与链表】

目录 1&#xff0c;ArrayList的缺陷 2&#xff0c;链表 2.1 链表的概念及结构 2.2 链表的实现 2.2.1 无头单向非循环链表实现 3&#xff0c;LinkedList的模拟实现 3.1 无头双向链表实现 4&#xff0c;LinkedList的使用 4.1 什么是LinkedList 4.2 LinkedList的使用 5…

无需付费,没有广告,驱动人生海外版本DriverTalent_Pro_v8.0.0.2单文件

如果你是一位电脑爱好者&#xff0c;你一定知道驱动程序的重要性。驱动程序是连接电脑硬件和操作系统的桥梁&#xff0c;它们可以让你的电脑运行更流畅&#xff0c;更稳定&#xff0c;更高效。但是&#xff0c;驱动程序也会随着时间的推移而过时&#xff0c;或者与新的系统不兼…

iview 组件里面的(任何一个月)整月日期全部选中_iview时间轴选中有历史记录日期

iview 组件里面的整月日期全部选中&#xff1a; ①&#xff1a;第一种是当前月的日期全部选中&#xff1a; 先上效果图&#xff1a;当前月分 获取到的值&#xff1a; 当前月的方法&#xff1a; // getDateStr() {// var curDate new Date();// var curMonth curDate.ge…

C# 利用XejeN框架源码,编写一个在 Winform 界面上的语法高亮的编辑器,使用 Monaco 编辑器

析锦基于Monaco技术实现的Winform语法高亮编辑器 winform中&#xff0c;我们有时需要高亮显示基于某种语言的语法编辑器。 目前比较强大且UI现代化的&#xff0c;无疑是宇宙最强IDE的兄弟&#xff1a;VS Code。 类似 VS Code 的体验&#xff0c;可以考虑使用 Monaco Editor&a…

每日一题——冒泡排序

C语言——冒泡排序 冒泡排序练习 前言&#xff1a;CSDN的小伙伴们&#xff0c;大家好&#xff01;今天我来给大家分享一种解题思想——冒泡排序。 冒泡排序 冒泡法的核心思想&#xff1a;两两相邻的元素进行比较 2.冒泡排序的算法描述如下。 (1)比较相邻的元素。如果第一 个比…

ARCGIS 如何对河流等线条图形进行Smooth处理——具有多个断点高阶版

1.线转点折点&#xff08;注意&#xff01;很重要&#xff0c;不是线转点&#xff09; 2.点转线步骤 ## 3 线的融合 2.1 新建Filed 》短精度类型》利用选择工具的 线文件。全选同一条河流点&#xff0c;进入Tabel的选择界面。给同一条河赋值同一个值。 大功告成&#xff01;…

JS安全应用

JS应用 常见分析调试&#xff1a; -代码全局搜索 案例 登录框&#xff0c;可以看到发送用户名密码被JS加密 搜索Username&#xff0c;找到加密地方 logindata.UserName encodeURI(encrypt.encrypt(numMobile));logindata.Mobile encodeURI(encrypt.encrypt(numMobile));…

Jmeter如何进行分布式测试

使用Jmeter进行性能测试时&#xff0c;有些同学问我如果并发数比较大(比如最近项目需要支持1000并发)&#xff0c;单台电脑的配置(CPU和内存)可能无法支持&#xff0c;怎么办就需要使用分布式压测 1.分布式原理&#xff1a; 1、Jmeter分布式测试时&#xff0c;选择其中一台作…

视频融合共享平台LntonCVS视频监控管理平台技术方案详细介绍

LntonCVS国标视频综合管理平台是一款以视频为核心的智慧物联应用平台。它基于分布式、负载均衡等流媒体技术进行开发&#xff0c;提供广泛兼容、安全可靠、开放共享的视频综合服务。该平台具备多种功能&#xff0c;包括视频直播、录像、回放、检索、云存储、告警上报、语音对讲…

jpa下hibernate的ddl-auto的各种属性

在jpa中ddl-auto一共有四种&#xff0c;分别为&#xff1a; ddl-auto&#xff1a;create ----每次运行该程序&#xff0c;没有表格会新建表格&#xff0c;表内有数据会清空&#xff1b; ddl-auto&#xff1a;create-drop ----每次程序结束的时候会清空表 ddl-auto&#xff1a;…

2024最新IDEA插件开发+发布全流程 SelectCamelWords[选中驼峰单词](idea源代码)

2024最新IDEA插件开发&#xff08;发布&#xff09;-SelectCamelWords[选中驼峰单词]&#xff08;idea源代码&#xff09; 参考文档 Jetbrains Idea插件开发文档: https://plugins.jetbrains.com/docs/intellij/welcome.html代码地址&#xff1a;https://github.com/yangfeng…

如何覆盖!important修饰的属性

最简单的方法 如果这个!important修饰的属性 是自己的写的&#xff0c;去掉这种写法&#xff0c;使用优先级的方式来写这个属性&#xff08;.outter .inner 的优先级就会比 。outter的优先级高&#xff09; 复杂的方法&#xff1a;用魔法打败魔法 但是这个样式来自于全局css&am…

代码随想录——子集Ⅱ(Leecode 90)

题目链接 回溯 class Solution {List<List<Integer>> res new ArrayList<List<Integer>>();List<Integer> list new ArrayList<Integer>();boolean[] used; public List<List<Integer>> subsetsWithDup(int[] nums) {use…