echart折线图动感设计

news2024/11/7 13:11:13

效果:

起由:

需求设计大大觉得EChart图表的折线图太过于死板,没有交互感,希望可以实现上图的效果,经过一顿摸索发现EChart折线图effect属性可以让光点沿着折线的路径移动,从而实现动态效果,注意这个“波动的光条”的轨迹这会走两点间的最短距离

学习啦:

EChart的effect属性:

 show:控制是否显示动态效果,类型:Boolean

   constantSpeed:设置动态效果的流动速度(单位为像素/秒)。设置该属性后,动画速度将固定为该值,而不是随着图表的大小变化,类型:Number

 trailLength控制光点拖尾的长度。取值范围为 [0, 1],值越大,拖尾越长;值越小,拖尾越短,类型:Number

 symbol:设置光点的形状。可以使用预定义的形状(如 'circle''arrow ''rect'),或者指定图片路径作为自定义图标,类型:String

 symbolSize:设置光点的大小,可以是数字或数组(如 [width, height]

   shadowBlur:设置光点的阴影模糊半径,适合用来增强光点的发光效果.

   shadowColor:设置光点的阴影颜色

代码一:

<template>
  <!-- 图表容器 -->
  <div ref="chartContainer" style="width: 800px; height: 400px;"></div>
</template>

<script setup>
import { onMounted, ref } from 'vue';
import * as echarts from 'echarts';

// 定义图表容器的引用
const chartContainer = ref(null);

onMounted(() => {
  // 初始化 ECharts 实例
  const myChart = echarts.init(chartContainer.value);

  // 配置图表的选项
  const option = {
    backgroundColor: '#0a2e36', // 深色背景
    xAxis: {
      type: 'category',
      data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct'],
      boundaryGap: false, // 不留白
      axisLine: { lineStyle: { color: '#aaa' } }
    },
    yAxis: {
      type: 'value',
      axisLine: { lineStyle: { color: '#aaa' } }
    },
    series: [
      {
        type: 'line',
        data: [20, 50, 35, 70, 90, 40, 65, 30, 50, 60],
        lineStyle: {
          width: 3,
          color: {
            type: 'linear',
            x: 0,
            y: 0,
            x2: 1,
            y2: 0,
            colorStops: [
              { offset: 0, color: 'rgba(0, 255, 255, 0.6)' },
              { offset: 1, color: 'rgba(0, 100, 255, 0.6)' }
            ]
          }
        },
        areaStyle: {
          color: {
            type: 'linear',
            x: 0,
            y: 0,
            x2: 0,
            y2: 1,
            colorStops: [
              { offset: 0, color: 'rgba(0, 150, 255, 0.2)' },
              { offset: 1, color: 'rgba(0, 150, 255, 0)' }
            ]
          }
        }
      },
      {
        type: 'lines',
        coordinateSystem: 'cartesian2d',
        polyline: true,
        effect: {
          show: true,
          constantSpeed: 80,    // 较低速度让移动更平滑
          trailLength: 0.7,     // 较长拖尾以增加流动感
          symbol: 'circle',     // 使用圆形光点
          symbolSize: 10,       // 光点的大小
          color: 'rgba(255, 255, 255, 0.8)', // 光点的颜色
          shadowBlur: 0, //光条背景轨迹宽度
          shadowColor: 'rgba(255, 255, 255, 0.1)' //光条背景轨迹颜色
        },
        lineStyle: {
          opacity: 0 // 隐藏 `lines` 的线,只显示光点效果
        },
        data: [
          {
            coords: [
              [0, 20], [1, 50], [2, 35], [3, 70], [4, 90],
              [5, 40], [6, 65], [7, 30], [8, 50], [9, 60]
            ] // 跟随折线图的坐标轨迹
          }
        ]
      }
    ]
  };

  // 设置图表的配置选项
  myChart.setOption(option);
});
</script>

<style scoped>
/* 为图表组件设置样式 */
</style>

代码二:

<template>
  <div ref="chartRef" style="width: 800px; height: 400px;"></div>
</template>

<script setup>
import * as echarts from 'echarts';
import { onMounted, ref } from 'vue';

const chartRef = ref(null); // 用于引用图表 DOM 元素

onMounted(() => {
  // 初始化数据
  const data = [
    [0, 820],
    [1, 932],
    [2, 901],
    [3, 934],
    [4, 1290],
    [5, 1330],
    [6, 1320]
  ];
  const xAxisData = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'];

  // 配置选项
  const option = {
    xAxis: {
      type: 'category',
      data: xAxisData
    },
    yAxis: {
      type: 'value'
    },
    series: [
      {
        type: 'line',
        data: data.map(item => item[1]), // 仅用作背景的折线图
        smooth: true,
        lineStyle: {
          width: 2,
          color: 'rgba(100, 100, 255, 0.3)' // 浅蓝色,低透明度的线段
        },
        areaStyle: {
          color: {
            type: 'linear',
            x: 0,
            y: 0,
            x2: 0,
            y2: 1,
            colorStops: [
              { offset: 0, color: 'rgba(100, 150, 255, 0.2)' },
              { offset: 1, color: 'rgba(100, 150, 255, 0)' }
            ]
          }
        }
      },
      {
        type: 'lines',
        coordinateSystem: 'cartesian2d',
        polyline: true,
        effect: {
          show: true,
          constantSpeed: 100, // 光点的移动速度
          trailLength: 0.3, // 光点的拖尾长度
          symbol: 'circle', // 光点的形状
          symbolSize: 10, // 光点的大小
          color: 'rgba(255, 255, 0, 1)', // 亮黄色光点
          shadowBlur: 10, // 增加光点的光晕效果
          shadowColor: 'rgba(255, 255, 0, 0.8)' // 光点光晕颜色
        },
        lineStyle: {
          opacity: 0 // 隐藏原本的线条,只显示光点效果
        },
        data: [
          {
            coords: data
          }
        ]
      }
    ]
  };

  // 初始化 ECharts 实例并设置选项
  const chart = echarts.init(chartRef.value);
  chart.setOption(option);
});
</script>

<style scoped>
/* 你可以在这里添加样式 */
</style>

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

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

相关文章

2-2.STM32之定时器TIM---输入捕获--实验2( PWMI模式测频率占空比)

输入捕获模式测频率、PWMI模式测频率占空比-CSDN博客 参考这篇文章&#xff01; 来利用一个GPIO的定时器的两个通道进行捕获占空比和频率&#xff0c;看出可以看出。TI1FP1和TI2FP2&#xff0c;计数值分别在CCR1和CCR2中取&#xff0c; 测周法 IC.c #include "stm32f1…

mathtype中自定义数组维数问题

1 选中红框里的内容 2 设置矩阵维数&#xff0c;即行列数 3 选中中间数字部分&#xff0c;选中左边大括号&#xff0c;或者快捷键ctrll. ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/39ec0c8ed76a46d8b83d484a84ac59a7.png选中内部a

普吕克线( Plücker 线)

普吕克线 在 Plcker 坐标表示中&#xff0c;一条直线 l ‾ 1 \underline{l}_1 l​1​可以用以下两个向量来表示&#xff1a; l ‾ 1 l 1 ϵ m 1 \underline{l}_1 l_1 \epsilon m_1 l​1​l1​ϵm1​ 方向向量 l 1 l_1 l1​&#xff1a;表示直线的方向。动量向量 m 1 m_…

SLMi350DB-DG适用于驱动低边侧和高边侧的MOSFET和IGBT 兼容光耦的单通道隔离驱动器

SLMi350DB-DG是一款兼容光耦的单通道隔离驱动器&#xff0c;具有4A/7A源电流/灌电流以及3.75kVRMS隔离耐压值&#xff0c;适用于驱动低边侧和高边侧的MOSFET和IGBT。与光耦栅极驱动器相比&#xff0c;SLMi350DB-DG具有高共模瞬态抗扰度(CMTI)、低传播延迟和较小的脉宽失真等关键…

帕金森患者必看!这些维生素能帮你改善生活质量!

帕金森病&#xff0c;这个看似遥远的疾病&#xff0c;却悄然影响着许多人的生活质量。作为一种慢性神经退行性疾病&#xff0c;帕金森不仅会导致患者的运动能力受限&#xff0c;还会引发一系列非运动性症状&#xff0c;如便秘、情绪波动等。然而&#xff0c;你知道吗&#xff1…

5G智能对讲终端|北斗有源终端|北斗手持机|单兵|单北斗

在当今这个快速发展的数字化时代&#xff0c;5G技术的广泛应用正以前所未有的速度推动着各行各业的变革。作为这一技术浪潮中的重要一环&#xff0c;5G智能终端QM630D凭借其卓越的性能和多样化的功能&#xff0c;在林业、渔业、安保、电力、交通等多个领域展现出了巨大的应用潜…

【comfyui教程】ComfyUI有趣工作流推荐:快速换脸,创意随手掌握!

前言 在数字影像处理和创意表达领域&#xff0c;ComfyUI 绝对是你的得力助手&#xff01;今天我们推荐一个非常有趣的工作流——快速换脸。无论你是图像编辑小白&#xff0c;还是深耕AI影像的达人&#xff0c;这个工作流都能让你快速实现面部迁移&#xff0c;体验全新的照片玩…

GPT原理;ChatGPT 等类似的问答系统工作流程如下;当用户向 ChatGPT 输入一个问题后:举例说明;ChatGPT不是通过索引搜索的传统知识库

目录 GPT原理 GPT架构 GPT 主要基于 Transformer 的解码器部分 ChatGPT 等类似的问答系统工作流程如下: 用户输入 文本预处理 模型处理 答案生成 输出回答 当用户向 ChatGPT 输入一个问题后:举例说明 文本预处理: ChatGPT不是通过索引搜索的传统知识库 GPT GPT…

Linux云计算 |【第五阶段】CLOUD-DAY8

主要内容&#xff1a; 掌握DaemonSet控制器、污点策略&#xff08;NoSchedule、Noexecute&#xff09;、Job / CronJob资源对象、掌握Service服务、服务名解析CluterIP&#xff08;服务名自动发现&#xff09;、&#xff08;Nodeport、Headless&#xff09;、Ingress控制器 一…

基于Zynq FPGA对雷龙SD NAND的测试

一、SD NAND 特征 1.1 SD 卡简介 雷龙的 SD NAND 有很多型号&#xff0c;在测试中使用的是 CSNP4GCR01-AMW 与 CSNP32GCR01-AOW。芯片是基于 NAND FLASH 和 SD 控制器实现的 SD 卡。具有强大的坏块管理和纠错功能&#xff0c;并且在意外掉电的情况下同样能保证数据的安全。 …

探索空间计算与 VR 设备的未来:4K4DGen 高分辨率全景 4D 内容生成系统

在当今科技飞速发展的时代,空间计算和 VR 设备正逐渐成为人们体验沉浸式场景的重要工具。而今天,我们要为大家介绍一款具有创新性的技术 ——4K4DGen 高分辨率全景 4D 内容生成系统,它为 VR/AR 沉浸式体验带来了全新的可能性。 一、项目概述 4K4DGen 项目的核心目标是实现 …

使用官网tar包制作OpenSSL及OpenSSH rpm包进行升级安装(OpenSSH_9.9p1, without OpenSSL未解决)

一、制作openssl-1.1.1w.rpm包 1、安装基础依赖包和rpmbuild及其依赖包 yum install curl which make gcc perl perl-WWW-Curl rpm-build rpm-build rpmdevtools tree -y yum install gcc-c glibc glibc-devel openssl openssl-devel \pcre-devel zlib zlib-devel perl…

Node.js回调函数以及事件循环使用介绍(基础介绍 三)

回调函数 Node.js 异步编程的直接体现就是回调。 异步编程依托于回调来实现&#xff0c;但不能说使用了回调后程序就异步化了。 回调函数在完成任务后就会被调用&#xff0c;Node 使用了大量的回调函数&#xff0c;Node 所有 API 都支持回调函数。 例如&#xff0c;我们可以…

Linux(CentOS)安装 MySQL

CentOS版本&#xff1a;CentOS 7 MySQL版本&#xff1a;MySQL Community Server 8.4.3 LTS 1、下载 MySQL 打开MySQL官网&#xff1a;https://www.mysql.com/ 直接下载网址&#xff1a;https://dev.mysql.com/downloads/mysql/ 其他版本 2、上传 MySQL 文件到 CentOS 使用F…

服务器被攻击排查记录

起因 我的深度学习的所有进程突然被killed&#xff0c;我以为是检修&#xff0c;后面发现好像简单的python代码可以正常运行。但是我的训练进程一启动就会被killed 第一时间没有用htop查看cpu&#xff0c;用top看着挺正常的&#xff0c;但是后面看htop&#xff0c;全是绿的&a…

TDengine 签约蘑菇物联,改造通用设备工业互联网平台

在当前工业互联网迅猛发展的背景下&#xff0c;企业面临着日益增长的数据处理需求和智能化转型的挑战。通用工业设备的高能耗问题愈发突出&#xff0c;尤其是由这些设备组成的公辅能源车间&#xff0c;亟需更高效的解决方案来提升设备运行效率&#xff0c;降低能源消耗。为此&a…

【大数据学习 | kafka高级部分】文件清除原理

2. 两种文件清除策略 kafka数据并不是为了做大量存储使用的&#xff0c;主要的功能是在流式计算中进行数据的流转&#xff0c;所以kafka中的数据并不做长期存储&#xff0c;默认存储时间为7天 那么问题来了&#xff0c;kafka中的数据是如何进行删除的呢&#xff1f; 在Kafka…

TOEIC 词汇专题:市场销售篇

TOEIC 词汇专题&#xff1a;市场销售篇 市场销售是企业推广产品和树立品牌形象的重要环节。今天为大家介绍在市场销售领域中常用的托业词汇&#xff0c;助力更好地理解相关英语场景。 1. 市场推广与活动 市场销售离不开推广活动&#xff0c;以下是一些核心词汇&#xff1a; A…

基于 Vue3、Vite 和 TypeScript 实现开发环境下解决跨域问题,实现前后端数据传递

引言 本文介绍如何在开发环境下解决 Vite 前端&#xff08;端口 3000&#xff09;和后端&#xff08;端口 80&#xff09;之间的跨域问题&#xff1a; 在开发环境中&#xff0c;前端使用的 Vite 端口与后端端口不一致&#xff0c;会产生跨域错误提示&#xff1a; Access to X…

OpenCV-Python-安装环境与测试样例

本文使用Pycharm安装openCV 1.打开pycharm终端 (GUI是我自己创建的项目名称) 错误&#xff1a;终端如果打开闪退的话 应对如下&#xff1a; 汉化版&#xff1a;文件->设置->工具->终端->红框位置设置cmd 英文版&#xff1a;file->settings->Tools->t…