echarts 时间线

echarts 时间线 (下面附有完整示例)

在这里插入图片描述
在这里插入图片描述

实现思路

1、先分析图片是由一根y轴线和每个小节点组成;
2、可以看出时间线是没有轴的,所以将“ xAxis ”属性隐藏;
3、y轴是没有分割线的所以隐层“ yAxis ”中的“ splitLine ”区域中的分隔线;
4、同时也要隐藏y轴刻度“ yAxis ”中的“ axisTick ”隐藏;
5、可以看出时间线实在中间,设置“ grid ”属性中“ left ”和“ right ”个50%;
6、series采用line折线图类型来加载
6、在就是改变时间线上的颜色就可以了;

完整示例
1.1 index.html

<!DOCTYPE html>
<html lang="en" style="height: 100%">

<head>
  <meta charset="utf-8">
</head>

<body style="height: 100%; margin: 10px">
  <div id="container" style="width: 50%;height: 70%;margin-top: 10px"></div>

  <script type="text/javascript" src="./echarts.min.js"></script>

  <script type="text/javascript">
    
    // 存储数据
    var list = [];
    // 存储经过处理的series数据值
    var seriesList = [];
    // 存储y轴数据
    var yarr = [];
    // 设置渐变颜色
    var color1 = "#3fff00"; // 红色
    var color2 = "#00f3ff"; // 蓝色
    var colors;
    // 获取数据
    fetch('./data.json')
      .then(response => response.json()) // 将响应转换为JSON
      .then(data => {
        list = data;
        // 计算颜色
        colors = generateColorsBetween(color1, color2, list.length).reverse();
        map();
        initChsrt();
      })
    // 梳理数据
    function map() {
      list.map((item, index) => {
        seriesList.push({
          time: item.time, //时间
          title: item.title, //标题
          value: 0,
          label: {
            show: true,
            lineHeight: 20,
            align: index % 2 == 0 ? "left" : "right",
            padding: 20,
            position: index % 2 == 0 ? "left" : "right",
            formatter: function (params) {
              return `{bolder|${params.data.time}}\n{b|${params.data.title}}`;
            },
            rich: {
              bolder: {
                fontWeight: 700,
                color:colors[index],
              },
              b:{
                color:colors[index],
              }
            },
          },
        });
        yarr.push(`${item.time}`);
      });
    }
    // 加载时间线
    function initChsrt() {
      var dom = document.getElementById('container');
      var myChart = echarts.init(dom, null, {
        renderer: 'canvas',
        useDirtyRect: false
      });
      var option = {
        backgroundColor:"#000",
        animation:true,
        grid: {
          top: "5%",
          left: "50%",
          right: "30%",
          bottom: "5%",
        },
        legend: {
          bottom: 0,
          itemWidth: 10,
          itemHeight: 10,
          textStyle: {
            padding: [2, 0, 0, 0],
          },
        },
        xAxis: { // 隐藏x轴
          show: false,
          axisLine: { show: false },
          axisTick: { show: false },
          axisLabel: { show: false },
          splitLine: { show: false },
          min: 0,
          max: 0,
        },
        yAxis: { //设置y样式
          type: "category", //使用类目轴
          axisLine: {
            show: true,
            lineStyle: {
              width: 10, //修改Y轴线宽
              color: { // 线颜色设置为线性渐变
                type: 'linear',
                x: 0,
                y: 0,
                x2: 0,
                y2: 1,
                colorStops: [{
                  offset: 0, color: color1 // 0% 处的颜色
                }, {
                  offset: 1, color: color2 // 100% 处的颜色
                }],
                global: false // 缺省为 false
              },
            },
            symbol: ['none', 'arrow'],//设置箭头线
            symbolSize: [20, 20], //修改箭头大小
            symbolOffset: [0, 10] // 调整箭头位置
          },
          // 隐层坐标轴刻度
          axisTick: {
            show: false,
            alignWithLabel: true,
          },
          // 隐层grid 区域中的分隔线
          splitLine: {
            show: false,
          },
          // 隐藏坐标轴刻度标签
          axisLabel: {
            show: false,
          },
          data:[...yarr,'']
        },
        series: [
          {
            type: "line", 
            symbol: 'arrow', //设置箭头
            symbolSize: 10, //节点样式大小
            itemStyle: { //修改节点样式颜色
              color: function (vlaue, params) {
                return colors[vlaue.dataIndex]
              },
            },
            // 设置箭头朝向
            symbolRotate: function (value, params) {
              if (params.data.label && params.data.label.align == 'left') {
                return 270
              } else {
                return 90
              }
            },
            // 设置箭头偏移位置(不设置会全部跑到线中间)
            symbolOffset: function (value, params) {
              if (params.data.label && params.data.label.align == 'left') {
                return [12, 0]
              } else {
                return [-12, 0]
              }
            },
            hoverAnimation: false,
            legendHoverLink: false,
            data: [...seriesList, { value: -0, symbol: "none" }],//结束都加个空值
            lineStyle: {
              opacity: 0 //节点之间连线设置透明
            },
            tooltip:{
              formatter:function(params) {
                console.log(params)
              }
            }
          },
        ],
      };

      myChart.setOption(option);

      window.addEventListener('resize', myChart.resize);
    }

    // 计算颜色
    function generateColorsBetween(color1, color2, count) {
      let colors = [];
      let rgb1 = hexToRgb(color1);
      let rgb2 = hexToRgb(color2);
      let stepR = (rgb2.r - rgb1.r) / (count - 1);
      let stepG = (rgb2.g - rgb1.g) / (count - 1);
      let stepB = (rgb2.b - rgb1.b) / (count - 1);

      for (let i = 0; i < count; i++) {
        let r = Math.round(rgb1.r + stepR * i);
        let g = Math.round(rgb1.g + stepG * i);
        let b = Math.round(rgb1.b + stepB * i);
        colors.push(rgbToHex(r, g, b));
      }

      return colors;
    }

    function hexToRgb(hex) {
      let result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
      return result ? {
        r: parseInt(result[1], 16),
        g: parseInt(result[2], 16),
        b: parseInt(result[3], 16)
      } : null;
    }

    function rgbToHex(r, g, b) {
      return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
    }

  </script>
</body>

</html>
1.2 data.json
[
    {
      "time": "2024-01-11",
      "title": "这是标题这是标题"
    },
    {
      "time": "2024-01-31",
      "title": "这是标题这是标题这是标题这是标题这是标题这是标题"
    },
    {
      "time": "2024-02-22",
      "title": "这是标题这是标题这是标题这是标题这是标题这是标题"
    },
    {
      "time": "2024-03-06",
      "title": "这是标题这是标题这是标题"
    },
    {
      "time": "2024-03-09",
      "title": "这是标题这是标题这是标题这是标题"
    },
    {
      "time": "2024-03-18",
      "title": "这是标题这是标题这是标题"
    },
    {
      "time": "2024-04-26",
      "title": "这是标题这是标题这是标题这是标题这是标题"
    },
    {
      "time": "2024-04-29",
      "title": "这是标题这是标题这是标题这是标题"
    },
    {
      "time": "2024-05-09",
      "title": "这是标题"
    },
    {
      "time": "2024-05-15",
      "title":
        "这是标题这是标题这是标题这是标题这是标题"
    },
    {
      "time": "2024-05-30",
      "title":
        "这是标题这是标题这是标题这是标题这是标题"
    },
    {
      "time": "2024-06-30",
      "title": "这是标题这是标题这是标题这是标题这是标题这是标题"
    },
    {
      "time": "2024-07-24",
      "title": "这是标题这是标题这是标题这是标题"
    },
    {
      "time": "2024-08-01",
      "title": "这是标题这是标题"
    },
    {
      "time": "2024-08-17",
      "title": "这是标题这是标题这是标题这是标题这是标"
    },
    {
      "time": "2024-08-30",
      "title": "这是标题这是标题这是标题这是标题这是标题"
    }
  ]

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

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

相关文章

AI网络爬虫:用kimi提取网页中的表格内容

一个网页中有一个很长的表格&#xff0c;要提取其全部内容&#xff0c;还有表格中的所有URL网址。 在kimi中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个编写爬取网页表格内容的Python脚步的任务&#xff0c;具体步骤如下&#xff1a; 在F盘新建一个…

控制状态流程图中的消息活动

消息是一个Stateflow对象&#xff0c;用于在本地或图表之间进行数据通信。从发件人图表中&#xff0c;您可以发送或转发邮件。在接收图表中&#xff0c;队列接收消息并将其保存&#xff0c;直到图表能够对其进行评估。 使用Stateflow运算符&#xff0c;您可以访问消息数据&…

[PythonWeb:Django框架]:项目初始化搭建

文章目录 pip查看安装列表安装制定Django版本初始化django项目执行 python manage.py startapp projectName 生成app应用执行 python manage.py runserver 运行web项目settings.py注入应用配置django项目页面访问地址注意&#xff1a;再次访问地址&#xff0c;返回制定页面 pip…

【ubuntu】ubuntu-18.04开机卡在Starting User Manager for UID 120....问题解决方案

错误截图 解决方案 启动系统&#xff0c;开机界面单击按键esc键&#xff0c;注意需要将鼠标定位到菜单界面&#xff0c;移动键盘上下键选择Advanced options for Ubuntu 进入如下菜单&#xff0c;选择recovery mode 回车之后会弹出如下界面&#xff0c;选择如下root&#xff0…

爬虫界的“闪电侠”:异步爬虫与分布式系统的实战秘籍

Hi&#xff0c;我是阿佑&#xff0c;前文给大家讲了&#xff0c;如何做一个合法“采蜜”的蜜蜂&#xff0c;有了这么个自保的能力后&#xff0c;阿佑今天就将和大家踏入 —— 异步爬虫 的大门&#xff01; 异步爬虫大法 1. 引言1.1 爬虫框架的价值&#xff1a;效率与复杂度管理…

得物面试:Redis 内存碎片是什么?如何清理?

> **插&#xff1a;** [AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。](前言 – 床长人工智能教程 ) **坚持不懈&…

Django创建网站的地基

相关文档 1、为新网站创建一个文件夹&#xff08;这里是&#xff1a;locallibrary&#xff09; D:\django>mkdir locallibraryD:\django>cd locallibraryD:\django\locallibrary>dirVolume in drive D is 新加卷Volume Serial Number is B68C-03F7Directory of D:\dj…

基于SpringBoot设计模式之创建型设计模式·生成器模式

文章目录 介绍开始架构图样例一定义生成器定义具体生成器&#xff08;HTML格式、markdown格式&#xff09;实体类HTML格式生成器MarkDown格式生成器 测试样例 总结优点缺点 介绍 将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。   如…

C++ | Leetcode C++题解之第91题解码方法

题目&#xff1a; 题解&#xff1a; class Solution { public:int numDecodings(string s) {int n s.size();// a f[i-2], b f[i-1], c f[i]int a 0, b 1, c;for (int i 1; i < n; i) {c 0;if (s[i - 1] ! 0) {c b;}if (i > 1 && s[i - 2] ! 0 &&a…

每日一题13:Pandas:方法链

一、每日一题 &#xff1b;&#xff1a;&#xff1a; 解答&#xff1a; import pandas as pddef findHeavyAnimals(animals: pd.DataFrame) -> pd.DataFrame:heavy_animals animals[animals[weight] > 100].sort_values(byweight, ascendingFalse)result heavy_anim…

ssm132医院住院综合服务管理系统设计与开发+vue

医院住院综合服务管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对医院住院信息管理混乱&…

低代码开发平台在城市数字化转型中的技术实现与案例分析

城市数字化转型需要政策引导、技术创新、基础设施建设、人才培养、多方合作以及安全保障等全方位的支持与助力&#xff0c;共同推动城市的数字化进程&#xff0c;提升其竞争力和可持续发展能力。 其中&#xff0c;技术创新是推动数字化转型的核心动力&#xff0c;需要不断加强…

【kubernetes】集群的二进制部署安装

目录 一、环境部署 二、部署 docker引擎 三、部署 etcd 集群 1、准备签发证书环境 1.1 master01服务器配置 1.1.1 准备cfssl证书生成工具 1.1.2 生成Etcd证书 1.1.3 创建存放etcd配置文件&#xff0c;命令文件&#xff0c;证书的目录&#xff0c;并启动etcd服务 1.1.4…

Android中使用Palette让你的页面UI优雅起来

文章目录 1. 什么是Palette2. 引入Palette3. 使用 Palette3.1 同步方式3.2 异步方式3.3 获取色调值 4. 举例4.1 布局文件 activity_palette_list.xml ⬇️4.2 Activity&#xff1a;PaletteListActivity⬇️4.3 列表Adapter&#xff1a;PaletteListAdapter ⬇️4.4 列表item布局…

数字化智能:Web3时代的物联网创新之路

引言 随着科技的不断发展&#xff0c;物联网&#xff08;IoT&#xff09;技术正在迅速普及和应用。而随着Web3时代的到来&#xff0c;物联网将迎来新的发展机遇和挑战。本文将探讨Web3时代的物联网创新之路&#xff0c;深入分析其核心技术、应用场景以及未来发展趋势。 Web3时…

kk聊天室系统源码搭建-自适应手机电脑-秒级响应-群体消息

kk聊天室系统源码搭建-自适应手机电脑-秒级响应-群体消息-单体消息 可以无限创建聊天室&#xff0c;可以把单个聊天室链接拿出来单独使用&#xff0c;消息秒级响应&#xff0c;支持设置屏蔽词。 具体仔细看视频演示&#xff0c;不提供演示&#xff0c;因为青狐资源网会员用户太…

【Linux】缓冲区

目录 一、初识缓冲区 二、用户级缓冲区 三、内核级缓冲区 四、内核级缓冲区 VS 用户级缓冲区 五、用户级缓冲区在哪里&#xff1f; 一、初识缓冲区 缓冲区是什么&#xff1f;可以简单理解成一部分内存。例如用户缓冲区(char arr[])、C标准库提供的缓冲区、操作系统提供的缓…

【Python】图形用户界面设计

1、设计并编写一个窗口程序,该窗口只有一个按钮,当用户单击时可在后台输出hello world. import tkinter as tk def on_button_click():print("hello world") # 创建主窗口 root tk.Tk() root.title("Hello World Button") # 设置窗口大小 root.geometry…

Vue的学习 —— <网络请求库Axios>

目录 前言 正文 一、Axios基本概念 二、安装Axios 三、Axios使用方法 四、向服务器发送请求 前言 在之前的开发案例中&#xff0c;我们通常直接在组件中定义数据。但在实际的项目开发中&#xff0c;我们需要从服务器获取数据。当其他用户希望访问我们自己编写的网页时&a…

区块链数据集(一)Xblock

一、Transaction Datasets Ethereum On-chain Data [Dataset] 2021-10TransactionData/Code AvailableEthereum Introduction: This is the dataset of paper “XBlock-ETH: Extracting and Exploring Blockchain Data From Ethereum”. Data / Code Paper CiteDownloads: …