可视化图表与源代码显示的动态调整

news2024/9/22 1:05:19

可视化图表与源代码显示的动态调整

页面效果描述:本篇代码实现了通过拖动一个可调整大小的分隔符,用户可以动态地调整图表显示区域和源代码显示区域的大小。通过监听鼠标事件,当用户拖动分隔符时,会动态计算并更新两个区域的大小
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<!DOCTYPE html>
<html lang="en" style="height: 100%">
<head>
  <meta charset="utf-8">
  <style>
    body, html {
      height: 100%;
      margin: 0;
      display: flex;
      flex-direction: column;
    }
    #main-container {
      display: flex;
      flex: 1; /* 占据剩余空间 */
      overflow: hidden;
    }
    #chart-container {
      flex: 1; /* 初始时占据一半空间 */
      height: 100%;
      overflow: hidden;
      position: relative;
    }
    #source-container {
      flex: 0; /* 初始时不占据空间,根据需要调整 */
      background-color: rgba(111, 231, 35, 0.36);
      padding: 30px;
      overflow: auto;
      height: 90%;
    }
    #splitter {
      background-color: #ccc;
      cursor: ew-resize;
      width: 5px;
      position: absolute;
      right: 0;
      top: 0;
      bottom: 0;
      z-index: 1;
    }
    #downloadButton {
      padding: 10px 20px;
      background-color: #007bff;
      color: #1ed5cf;
      border: none;
      border-radius: 5px;
      cursor: pointer;
      font-size: 16px;
      position: absolute;
      top: 20px;
      right: 20px;
      z-index: 1000;
    }
  </style>
</head>
<body>
  <div id="main-container">
    <div id="chart-container">
      <div id="container" style="height: 100%;"></div>
      <div id="splitter"></div>
    </div>
    <div id="source-container">
      <pre id="source-code"></pre>
      <button id="downloadButton" onclick="downloadSourceCode()">下载</button>
    </div>
  </div>

  <script src="echarts.min.js"></script>
  <script type="text/javascript">
    var dom = document.getElementById('container');
    var myChart = echarts.init(dom, null, {
      renderer: 'canvas',
      useDirtyRect: false
    });
    var app = {};

    var option;

    option = {
  title: {
    text: '题目'
  },
  tooltip: {
    trigger: 'axis',
    axisPointer: {
      type: 'cross',
      label: {
        backgroundColor: '#6a7985'
      }
    }
  },
  legend: {
    data: ['数据1', '数据2', '数据3', '数据4', '数据5']
  },
  // toolbox: {
  //   feature: {
  //     saveAsImage: {}
  //   }
  // },
  grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
  },
  xAxis: [
    {
      type: 'category',
      boundaryGap: false,
      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    }
  ],
  yAxis: [
    {
      type: 'value'
    }
  ],
  series: [
    {
      name: '数据1',
      type: 'line',
      stack: 'Total',
      areaStyle: {},
      emphasis: {
        focus: 'series'
      },
      data: [120, 132, 101, 134, 90, 230, 210]
    },
    {
      name: '数据2',
      type: 'line',
      stack: 'Total',
      areaStyle: {},
      emphasis: {
        focus: 'series'
      },
      data: [220, 182, 191, 234, 290, 330, 310]
    },
    {
      name: '数据3',
      type: 'line',
      stack: 'Total',
      areaStyle: {},
      emphasis: {
        focus: 'series'
      },
      data: [150, 232, 201, 154, 190, 330, 410]
    },
    {
      name: '数据4',
      type: 'line',
      stack: 'Total',
      areaStyle: {},
      emphasis: {
        focus: 'series'
      },
      data: [320, 332, 301, 334, 390, 330, 320]
    },
    {
      name: '数据5',
      type: 'line',
      stack: 'Total',
      label: {
        show: true,
        position: 'top'
      },
      areaStyle: {},
      emphasis: {
        focus: 'series'
      },
      data: [820, 932, 901, 934, 1290, 1330, 1320]
    }
  ]
};

    if (option && typeof option === 'object') {
      myChart.setOption(option);
    }

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

    // 设置源代码显示
    document.getElementById('source-code').textContent = document.documentElement.outerHTML;

    let startX, startWidth, isResizing = false;

    document.getElementById('splitter').addEventListener('mousedown', function(e) {
      isResizing = true;
      startX = e.clientX;
      startWidth = document.getElementById('chart-container').offsetWidth;
      document.addEventListener('mousemove', onMouseMove);
      document.addEventListener('mouseup', onMouseUp);
      document.addEventListener('mouseleave', onMouseUp);
    });

    function onMouseMove(e) {
      if (!isResizing) return;
      let newWidth = startWidth + (e.clientX - startX);
      newWidth = Math.max(100, Math.min(document.getElementById('main-container').offsetWidth - 5, newWidth));
      document.getElementById('chart-container').style.flex =
              `${newWidth / document.getElementById('main-container').offsetWidth * 100}%`;
      document.getElementById('source-container').style.flex = `calc(100% - ${newWidth}px)`;
    }

    function onMouseUp() {
      isResizing = false;
      document.removeEventListener('mousemove', onMouseMove);
      document.removeEventListener('mouseup', onMouseUp);
      document.removeEventListener('mouseleave', onMouseUp);
    }

    // 下载源代码功能
     function downloadSourceCode() {
      var element = document.createElement('a');
      element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(document.documentElement.outerHTML));
      element.setAttribute('download', 'page.html');

      element.style.display = 'none';
      document.body.appendChild(element);

      element.click();

      document.body.removeChild(element);
    }
  </script>
</body>
</html>

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

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

相关文章

俄组织Fighting Ursa利用虚假汽车销售广告传播HeadLace后门

最近&#xff0c;Palo Alto Networks的科研人员揭露了有一个与俄罗斯有关联的威胁行动者——Fighting Ursa&#xff08;亦称APT28、Fancy Bear或Sofacy&#xff09;。该组织通过散布虚假的汽车销售广告&#xff0c;特别是针对外交官群体&#xff0c;散播名为HeadLace的后门恶意…

6款打印刻录监控与审计系统 | 一键解锁器功能探析

信息高度敏感的社会环境&#xff0c;企事业单位对于文档的安全传输、打印与刻录过程的监控与审计需求日益迫切。 然而&#xff0c;为了全面满足读者对安全工具的了解需求&#xff0c;这篇文章小编将首先概述几款领先的打印刻录监控与审计系统&#xff0c;随后简要提及“一键解…

【Java】Collection中自定义类重写contains方法。

如果集合中存储的是自定义对象&#xff0c;也想使用contaisn方法来判断是否包含&#xff0c;那么在javabean类中&#xff0c;一定要重写equals方法。 因为contains方法的底次是使用equals方法实现的&#xff0c;所以重写equals方法。 Main类&#xff1a; package demo;import…

SQL注入(闯关游戏)

目录 关卡1 关卡2 关卡3 关卡4 关卡5 关卡6 关卡7 关卡8 关卡9 关卡10 关卡11 关卡12 关卡13 关卡14 关卡15 关卡16 关卡17 关卡18 关卡19 关卡20 关卡21 关卡22 关卡23 关卡24 关卡1 (联合查询) ?gid1 第一件事情就是逃脱单引号的控制——》为了闭…

vue+element 根据父容器动态设置table高度出滚动条

可以通过CSS样式来控制表格的高度&#xff0c;并使用JavaScript动态地设置这个高度。 HTML: <template><el-table:data"tableData":height"tableHeight"style"width: 100%"><!-- 列配置 --></el-table> </template&…

【Kubernetes】Deployment 的清理策略

Deployment 的清理策略 在 Deployment 中配置 spec.revisionHistoryLimit 字段&#xff0c;可以指定其 清理策略。该字段用于指定 Deployment 保留旧 ReplicaSet 的个数&#xff0c;即更新 Pod 前的版本个数。该字段的默认值是 10。 创建 revisionhistory-demo.yaml 文件&…

一文了解K8S(Kubernates)

一、K8S 1. 概述 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态&#xff0c;其服务、支持和工具的使用范围相当广泛。 Kubernetes 这个名字源于希腊…

Unity 功能 之 创建 【Unity Package】 Manager 自定义管理的包使用配置URL,使用 git URL加载的简单整理

Unity 功能 之 创建 【Unity Package】 Manager 自定义管理的包使用配置URL&#xff0c;使用 git URL加载的简单整理 目录 Unity 功能 之 创建 【Unity Package】 Manager 自定义管理的包使用配置URL&#xff0c;使用 git URL加载的简单整理 一、简单介绍 二、Unity Package …

【你也能从零基础学会网站开发】SQL Server 2000中的数据类型之String字符串类型

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 SQL Server 中…

c++ | vector

前言 本篇博客讲解cSTL中的vector &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞…

珠江电缆,顺应全球变化,实现高质量出海

在全球经济快速变化的今天&#xff0c;越来越多的企业将目光投向了国际市场。特别是对于线缆行业来说&#xff0c;顺应全球变化、应对机遇与挑战&#xff0c;实现高质量出海已成为长期发展的战略目标之一。珠江电缆作为一家集研发、制造和销售为一体的大型专业电线电缆企业&…

智能电表在什么情况下需要加装互感器?

智能电表作为现代电力系统中不可或缺的一部分&#xff0c;负责准确计量电力消耗。然而&#xff0c;在某些特定条件下&#xff0c;仅凭智能电表无法满足高精度测量需求&#xff0c;此时便需引入互感器。本文将深入解析智能电表与互感器的协作原理&#xff0c;明确指出加装互感器…

ASR(Automatic Speech Recognition)调研,当前sota的架构

asr概览英文纯享版&#xff1a;an overview of transducer models for asr 本文主要讲述nvidia和openai的模型架构&#xff0c;应为他们两家霸榜huggingface leader board 小白也能阅读了解一下当前sota的asr架构是什么样的 评测指标 Word Error Rate (WER)&#xff1a;错词率…

关于使用QListView向模型插入第一条数据的相关问题

在使用QListView的时候&#xff0c;看着它的四个尖角不爽&#xff0c;想着让它变成圆角矩形吗&#xff0c;但麻烦就接踵而至了。。。 在向其中插入第一条数据的时候发现&#xff0c;你插入的一条数据它存在边界超过QListView的现象。如下图所示&#xff1a; 这就令人头大了&am…

JavaEE 图书管理系统

基于阿里巴巴的fastjson框架搭建的JavaEE版本的图书管理系统&#xff0c;项目架构如下&#xff1a; fastjson包的阿里云下载镜像如下&#xff1a; Central Repository: com/alibaba/fastjson2/fastjson2/2.0.8 运行效果&#xff1a; Bean Book.java package Bean;public c…

2024华数杯大学生数学建模竞赛(C题)数学建模完整思路+完整代码全解全析

你是否在寻找数学建模比赛的突破点&#xff1f;数学建模进阶思路&#xff01; 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024华数杯数学建模竞赛&#xff08;C题&#xff09;的全面解析。这个解决方案包不仅包括完整的代码实现&#xff0c;还有详尽的建模过程和解…

按照指定格式打印pprint()

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 按照指定格式打印 pprint() [太阳]选择题 根据给定的Python代码&#xff0c;哪个选项是正确的&#xff1f; from pprint import pprint data { name: A, age: 30, hobbies:…

Vue项目学习(项目的开发流程)(2)

1、vue项目的默认首页和入口文件 2、两种书写的方式是表达一样的意思——>el&#xff1a;指定当前Vue实例挂载到哪个区域里 3、如果属性值和属性名一致&#xff0c;冒号和后面可以省略不写 &#xff08;所以有两种写法&#xff09; 4、以".vue"文件结尾的文件在项…

3个步骤上⼿Midjourney表情包教程,并上传到微信实现变现!

羡慕别⼈设计的表情包,有趣⼜好玩~也想拥有⾃⼰的个性表情包,可是⾯对复杂的设计流程,却不知从何开始?现在⽤Midjourney,你就可以轻松制作,各种⻛格的表情包,变钱赚钱,这些⽅法分享给 你~ 通⽤公式: 我们⽤表情包魔法公式,加⼊你想要的风格,⽐如漫画、卡通、插画、…

rpc框架怎么使用

这是我们提供RPC的服务类&#xff1a; class MprpcApplication { public:static void Init(int argc, char **argv);static MprpcApplication& GetInstance();static MprpcConfig& GetConfig(); private:static MprpcConfig m_config;MprpcApplication(){}MprpcApplica…