从零到一大屏开发过程记录

news2024/12/25 1:02:29

写在前面,博主是个在北京打拼的码农,凭借多年前端工作经验做过各类项目,最近心血来潮在这儿写点东西,欢迎大家多多指教。

  • 对于文章中出现的任何错误请大家批评指出,一定及时修改。
  • 有任何想要讨论和学习的问题可联系我:13287946835@139.com。
  • 发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。

目录

开发大屏页面

一、原型

1、简单构思功能效果实现方式

二、蓝湖

1、查看蓝湖设计后,简单构思样式处理

2、下载全部切图单独建文件夹存入项目中,使用时改名引入

三、基础构筑

1、建文件夹、建核心页面、建公共样式文件、添加路由

2、查找相关功能具体如何实现

2.1、词云

2.2、关系图

四、细节沟通

五、开发中需要留意的部分

1、避免留白

2、词云自定义形状不显示

3、淘宝源过期导致无法下载安装依赖问题

4、echarts设置柱状图刻度线颜色

5、echart设置柱子渐变色

六、开发中的bug

1、页面全屏后左侧出现白边,排除了浏览器问题

 2、安装列表丝滑滚动插件报错

七、代码书写过程

1、基本布局形成

2、自制词云组件

 3、开发柱形图

八、开发习惯讲解

1、calc

九、开发完成最终效果


开发大屏页面

本文关键字:

功能实现、设计构思、依赖引用、适配处理、vue2

一、原型

1、简单构思功能效果实现方式

 该大屏页面是需要直接在已有PC端普通项目中实现,我之前已经有过一些经验

(大屏大概是怎么个开发法(前端)_大屏开发-CSDN博客)

不难看出,功能设计的不算复杂,词云和核心部位的统计图通过Echarts及其衍生库就能实现

以左中右标准布局,进行组件化开发

二、蓝湖

1、查看蓝湖设计后,简单构思样式处理

众所周知,大屏页面开发麻烦就麻烦在琐碎的样式很多,调整起来很费时间。

每个大屏都是由几十个背景图组合而成,小图标的定位,元素大小的调整,在从零到一的情况下需要消耗大量精力。

2、下载全部切图单独建文件夹存入项目中,使用时改名引入

三、基础构筑

1、建文件夹、建核心页面、建公共样式文件、添加路由

在大屏开发中,产品和UI通常不会提出太多动效方面的要求,比如是否引入wow库让页面丝滑一些以此来提高美观性、页面流畅度、观感,这种需要开发者自己斟酌使用,如果给的开发时间比较宽裕,那么可以使用一些动画效果,当然也可以先完成再完善。

2、查找相关功能具体如何实现

2.1、词云

(GitHub - ecomfe/echarts-wordcloud: Word Cloud extension based on Apache ECharts and wordcloud2.js)

官网需要翻墙,实际上我们开发中不会用到特别特殊的东西去专门搭梯子看官方文档,只需要百度相关的中文文章就足够我们使用了。

可以借鉴下方文章:

(Echarts—词云库(echarts-wordcloud)配置详解和使用(可自定义形状)-CSDN博客)

我做的效果:

2.2、关系图

大屏开发中我们会看到各种各样花里胡哨的图,一般都是即用即查,最好先问问产品要做的这个叫啥方便我们直接去各个文档上搜

(Examples - Apache ECharts)

实际上antV上也有类似的(G6),没选用的根本原因还是风格上需要统一,当前项目只引用了echarts,直接使用echarts版方便快捷也比较便于维护。

四、细节沟通

1、关系图需要一次展示9个点,隔几秒刷新一次图表,一共有多少数据需要展示

2、日期的实时刷新

3、列表的滚动速度

4、全部接口的刷新频率

五、开发中需要留意的部分

1、避免留白

全屏背景图,滚动有留白解决办法 - 简书

2、词云自定义形状不显示

纯白纯黑图片转为base64格式后,按照官网方法照做发现词云直接没了,那么就要考虑是base64工具转换是不是出了问题,可以试试网上的其他base64图能否放在项目词云配置中能正常展示与否做一些调整。

我用的是(免费在线图片转Base64、生成Base64图片、图片转字符串 - 智慧工具库)

3、淘宝源过期导致无法下载安装依赖问题

(报错:request to https://registry.npm.taobao.org failed, reason certificate has expired-CSDN博客) 

4、echarts设置柱状图刻度线颜色

详细代码在下文

5、echart设置柱子渐变色

详细代码在下文

六、开发中的bug

1、页面全屏后左侧出现白边,排除了浏览器问题

发现不使用背景图使用背景色就没这个问题

。。。

这老项目给我留不少坑,估计是初始化样式那里有问题

简单试一下背景色和背景图共存可行

想着不能在这种问题浪费太多时间,就先在背景图吸色后设置样式解决

background: #000830 url(/static/img/bg.95143f0.png);

 2、安装列表丝滑滚动插件报错

npm install vue-seamless-scroll --save

npm ERR! code EINVALIDTAGNAME
npm ERR! Invalid tag name "优化": Tags may not have any characters that encodeURIComponent encodes.

npm ERR! A complete log of this run can be found in:

最后发现是node版本太低 ,使用nvm把npm版本切换到16就行了

"vue": "^2.6.11",
"webpack": "^3.12.0", 

后面老项目使用滚动依赖出现了各种各样的错误,考虑到不能在这块花太多时间,所以取消使用了。

在老项目的开发维护过程中,各种依赖包一动则牵动全部,尽量不要做太大的尝试,容易炸。

最后通过(vue简单实现无缝滚动_vue 无缝滚动-CSDN博客)自己写了组件实现了效果

七、代码书写过程

1、基本布局形成

<template>
  <div class="home">
    <div class="head"><p>声誉风险管理系统</p></div>
    <div class="left">
      <div class="item"><span>负面词云</span></div>
      <div class="item"><span>旧闻新发</span></div>
    </div>
    <div class="center"></div>
    <div class="right">
      <div class="item"><span>行业资讯</span></div>
      <div class="item"><span>悬而未决事件</span></div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  }
};
</script>

<style lang="less" scoped>
.home {
  position: fixed;
  width: 100%;
  height: 100%;
  display: flex;
  background: #000830 url(~@images/largeScreen/bg.png);
  background-size: 100% 100%;
}
.head {
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  position: fixed;
  width: 100%;
  height: 100px;
  background: url(~@images/largeScreen/head.png);
  background-size: 100% 100%;
  p {
    font-family: PingFangSC, PingFang SC;
    font-weight: 600;
    font-size: 30px;
    color: #ffffff;
    line-height: 0px;
    text-shadow: 2px 0px 10px #000000;
    text-align: center;
    font-style: normal;
    text-transform: none;
  }
}
.left,
.right {
  width: 25%;
  height: 100%;
}
.center {
  width: 50%;
}
.left {
  margin-left: 10px;
  padding-top: 60px;
  padding-bottom: 20px;
}
.right {
  margin-right: 10px;
  padding-bottom: 20px;
  padding-top: 40px;
}
.item{
  margin-top: 5px;
  width: 100%;
  height: 45%;
    background: url(~@images/largeScreen/item.png);
  background-size: 100% 100%;
    display: flex;
  justify-content: center;
  span{text-align: center;
    font-family: PingFangSC, PingFang SC;
font-weight: 500;
font-size: 23px;
color: #FFFFFF;
line-height: 80px;
text-align: center;
font-style: normal;
text-transform: none;
  }
}
</style>

使用我之前写的文章(大屏大概是怎么个开发法(前端)_大屏开发-CSDN博客)目录中一、里的适配代码

<template>
  <div class="home">
    <div class="head"><p>声誉风险管理系统</p></div>
    <div class="left">
      <div class="item"><span>负面词云</span></div>
      <div class="item"><span>旧闻新发</span></div>
    </div>
    <div class="center"></div>
    <div class="right">
      <div class="item"><span>行业资讯</span></div>
      <div class="item"><span>悬而未决事件</span></div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  mounted() {
    window.addEventListener("resize", () => {
      window.location.reload();
    });
    this.$nextTick(() => {
      // 监控屏幕尺寸变化
      var bodyStyle = document.createElement("style");
      // 这里根据具体的设计稿尺寸来定
      bodyStyle.innerHTML = `body{width:1920px; height:1080px!important;}`;
      document.documentElement.firstElementChild.appendChild(bodyStyle);
      this.screenWidth = document.body.clientWidth;
      this.screenHeight = document.body.clientHeight;
      window.onresize = () => {
        return (() => {
          this.screenWidth = document.documentElement.clientWidth;
          this.screenHeight = document.documentElement.clientHeight;
        })();
      };
      document.addEventListener("keydown", e => {
        if (e.code == "F11") {
          this.screenWidth = document.documentElement.clientWidth;
          this.screenHeight = document.documentElement.clientHeight;
        }
      });
    });
  },
  watch: {
    screenWidth: {
      handler: function() {
        // console.log("val", val);
        let docWidth = document.documentElement.clientWidth;
        let docHeight = document.documentElement.clientHeight;
        var designWidth = 1920, // 这里根据具体的设计稿尺寸来定
          designHeight = 1080, // 这里根据具体的设计稿尺寸来定
          widthRatio = docWidth / designWidth,
          heightRatio = docHeight / designHeight;
        document.body.style = `transform:scale(${widthRatio},${heightRatio});transform-origin:left top;overflow: hidden;`;
        // 应对浏览器全屏切换前后窗口因短暂滚动条问题出现未占满情况
        setTimeout(function() {
          var lateWidth = document.documentElement.clientWidth,
            lateHeight = document.documentElement.clientHeight;
          if (lateWidth === docWidth) return;

          widthRatio = lateWidth / designWidth;
          heightRatio = lateHeight / designHeight;
          document.body.style =
            "transform:scale(" +
            widthRatio +
            "," +
            heightRatio +
            ");transform-origin:left top;overflow: hidden;";
        }, 0);
      },
      immediate: true,
      deep: true
    },
    screenHeight: {
      handler: function() {
        // console.log("val", val);
        let docWidth = document.documentElement.clientWidth;
        let docHeight = document.documentElement.clientHeight;
        var designWidth = 1920, // 这里根据具体的设计稿尺寸来定
          designHeight = 1080, // 这里根据具体的设计稿尺寸来定
          widthRatio = docWidth / designWidth,
          heightRatio = docHeight / designHeight;
        document.body.style = `transform:scale(${widthRatio},${heightRatio});transform-origin:left top;overflow: hidden;`;
        // 应对浏览器全屏切换前后窗口因短暂滚动条问题出现未占满情况
        setTimeout(function() {
          var lateWidth = document.documentElement.clientWidth,
            lateHeight = document.documentElement.clientHeight;
          if (lateWidth === docWidth) return;

          widthRatio = lateWidth / designWidth;
          heightRatio = lateHeight / designHeight;
          document.body.style =
            "transform:scale(" +
            widthRatio +
            "," +
            heightRatio +
            ");transform-origin:left top;overflow: hidden;";
        }, 0);
      },
      immediate: true,
      deep: true
    }
  }
};
</script>

<style lang="less" scoped>
.home {
  position: fixed;
  width: 100%;
  height: 100%;
  display: flex;
  background: #000830 url(~@images/largeScreen/bg.png);
  background-size: 100% 100%;
}
.head {
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  position: fixed;
  width: 100%;
  height: 100px;
  background: url(~@images/largeScreen/head.png);
  background-size: 100% 100%;
  p {
    font-family: PingFangSC, PingFang SC;
    font-weight: 600;
    font-size: 30px;
    color: #ffffff;
    line-height: 0px;
    text-shadow: 2px 0px 10px #000000;
    text-align: center;
    font-style: normal;
    text-transform: none;
  }
}
.left,
.right {
  width: 25%;
  height: 100%;
}
.center {
  width: 50%;
}
.left {
  margin-left: 10px;
  padding-top: 60px;
  padding-bottom: 20px;
}
.right {
  margin-right: 10px;
  padding-bottom: 20px;
  padding-top: 40px;
}
.item {
  margin-top: 5px;
  width: 100%;
  height: 45%;
  background: url(~@images/largeScreen/item.png);
  background-size: 100% 100%;
  display: flex;
  justify-content: center;
  span {
    text-align: center;
    font-family: PingFangSC, PingFang SC;
    font-weight: 500;
    font-size: 23px;
    color: #ffffff;
    line-height: 70px;
    text-align: center;
    font-style: normal;
    text-transform: none;
    display: inline-block;
    height: 70px;
  }
}
</style>

2、自制词云组件

<template>
  <div style="width:100%;height:600px;margin-top:30px">
<div id="myEchart" style="width:470px;height:100%"></div>

  </div>
</template>

<script>
import * as echarts from 'echarts';
import 'echarts-wordcloud';

export default {
  data(){
   return{
     cloudInfo:[
    { name: '互联网服务', value: 1000 },
    { name: '交通运输', value: 850 },
    { name: '公司', value: 800 },
    { name: '军工', value: 600 },
    { name: '医药', value: 900 },
    { name: '商务服务', value: 600 },
    { name: '城乡规划', value: 800 },
    { name: '家政服务', value: 400 },
    { name: '安防', value: 850 },
    { name: '医疗服务', value: 200 },
    { name: '电子科技', value: 8000 },
    { name: '航空航天', value: 1500 },
    { name: '食品饮料', value: 1500 },
    { name: '能源', value: 800 },
    { name: '教育培训', value: 200 },
    { name: '金融', value: 100 },
    { name: '文化娱乐', value: 250 },
    { name: '电力', value: 1200 },
    { name: '石油化工', value: 300 },
    { name: '电子商务', value: 900 },
    { name: '建筑', value: 700 },
    { name: '旅游', value: 550 },
    { name: '环保', value: 750 },
    { name: '地产', value: 1100 },
    { name: '体育', value: 300 },
    { name: '通信', value: 950 },
    { name: '科研', value: 1200 },
    { name: '物流', value: 1300 },
    { name: '咨询', value: 600 },
    { name: '游戏', value: 850 },
    { name: '人力资源', value: 500 },
    { name: '水务', value: 300 },
    { name: '舞蹈艺术', value: 150 },
    { name: '汽车制造', value: 1100 },
    { name: '电影制作', value: 350 },
    { name: '游乐园', value: 250 },
    { name: '新能源', value: 900 },
    { name: '服装设计', value: 400 },
    { name: '采矿', value: 700 },
    { name: '信息安全', value: 800 },
    { name: '化妆品', value: 600 },
    { name: '音乐产业', value: 750 },
    { name: '物联网', value: 1200 },
    { name: '绿色建筑', value: 850 },  { name: '建筑', value: 700 },
    { name: '旅游', value: 550 },
    { name: '环保', value: 750 },
    { name: '地产', value: 1100 },
    { name: '体育', value: 300 },
    { name: '通信', value: 950 },
    { name: '科研', value: 1200 },
    { name: '物流', value: 1300 },
    { name: '咨询', value: 600 },
    { name: '游戏', value: 850 },
    { name: '人力资源', value: 500 },
    { name: '水务', value: 300 },
    { name: '舞蹈艺术', value: 150 },
    { name: '汽车制造', value: 1100 },
    { name: '电影制作', value: 350 },
    { name: '游乐园', value: 250 },
    { name: '新能源', value: 900 },
    { name: '服装设计', value: 400 },
    { name: '采矿', value: 700 },
    { name: '信息安全', value: 800 },
    { name: '化妆品', value: 600 },
    { name: '音乐产业', value: 750 },
    { name: '物联网', value: 1200 },
    { name: '绿色建筑', value: 850 },
    { name: '社交媒体', value: 950 },
    { name: '人工智能', value: 1000 },
    { name: '水产养殖', value: 320 },
    { name: '医学研究', value: 1800 },
    { name: '动物保护', value: 130 },
    { name: '航海', value: 1000 }
    ]
   }
  },
    mounted(){
       this.initEchart()
    },
    methods:{

        initEchart(){
           const echartDom = document.getElementById('myEchart');
           const myChart = echarts.init(echartDom);
            var maskImage = new Image();
            const base64Png=
'data:image/png;base64,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';          maskImage.src=base64Png;

      //      myChart.showLoading({
			// 	text: "读取数据中...", //loading,是在读取数据的时候显示
			// });
      // myChart.clear();
			var colors = [
				"#ffb980",
				"#2ec7c9",
				"#5ab1ef",
				"#b6a2de",
				"#d87a80",
				"#8d98b3",
				"#e5cf0d",
				"#97b552",
				"#95706d",
				"#dc69aa",
				"#07a2a4",
				"#9a7fd1",
				"#588dd5",
				"#f5994e",
				"#c05050",
				"#59678c",
				"#c9ab00",
				"#7eb00a",
				"#6f5553",
				"#c14089",
				"#409eff",
			];
           const option  = {
                series: [{
               type: 'wordCloud',

           maskImage: maskImage, //自定义形状
width:'100%',
height:'100%',
            gridSize: 8, // 控制词云图的网格大小,值越大词语之间的间距越大

            sizeRange: [14, 50], // 控制词语的大小范围

            rotationRange: [0, 0], // 控制词语的旋转角度范围

            rotationStep: 45, // 控制词语旋转的步长

            // shape: 'circle', // 控制词云图的形状,可选值为 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star'

            drawOutOfBound: false, // 控制词云图是否允许词语超出绘制区域

            // 布局的时候是否有动画

            layoutAnimation: true,

            // 图的位置

            left: 'center',

            top: 'center',

               textStyle: {
							normal: {
								color: function () {
									// Random color
									return colors[
										Math.round(Math.random() * 20)
									];
								},
							},
							// backgroundColor: "#fff",
						},
                emphasis: {
                    // focus: 'self',
                    textStyle: {
                        textShadowBlur: 3,
                        textShadowColor: '#333'
                    }
                },
                //data属性中的value值却大,权重就却大,展示字体就却大
                data:this.cloudInfo
            }]

           }
           // 图片加载好以后再设置配置
		maskImage.onload = function() {
option && myChart.setOption(option)
		}

           //随着屏幕大小调节图表
            window.addEventListener("resize", () => {
                myChart.resize();
            });
        }
    }
}

</script>

引入使用

 <div class="item"><span>负面词云</span><child1></child1></div>
import child1 from './childComponents/child1.vue';
  components:{child1},

引用echarts关系图

<!--
  *@description
  *@fileName src\components\largeScreen\childComponents\child3.vue
  *@author [jianzhen]
  *@date 2024/04/16 13:59:34
!-->
<template>
  <div class="child3">
<div class="left"><div class="part1"><p>***年舆情总量</p><p>6854</p></div><div class="part1"><p>重点关注</p><p>6854</p></div><div class="part1"><p>舆情事件</p><p>6854</p></div></div>
<div class="center"><p class="title">全国舆情地图</p><div style="width:100%;height:400px;margin-top:30px">
  <div id="myEchart3" style="width:600px;height:100%"></div>

  </div></div>
<div class="right"><p v-for="item of chartColor" :key="item"><span :style="'backgroundColor:'+item"></span>&emsp;&nbsp;名字&emsp;&emsp;数量</p></div>
  </div>
</template>
<script>
import * as echarts from 'echarts';
import graph from './child3.json';
export default {
  data () {
    return {
chartColor:['#9EC87F','#5470C6','#F3CA6B','#DE6E6A','#84BFDA','#599F76','#EE8A5D','#9265AF','#DC83C8'],
    }
  },
  mounted(){
this.setCharts();
  },
  methods:{
    setCharts(){

var chartDom = document.getElementById('myEchart3');
var myChart = echarts.init(chartDom);
var option;

myChart.showLoading();
  myChart.hideLoading();
  graph.nodes.forEach(function (node) {
    node.label = {
      show: node.symbolSize > 30
    };
  });
  option = {
    tooltip: {},
    // legend: [
    //   {
    //     data: graph.categories.map(function (a) {
    //       return a.name;
    //     })
    //   }
    // ],

  //   legend: {
  //     orient: 'vertical',//设置图例的方向
  //     left: '40%',
  //     top: "10%",
  //     itemHeight: 10,
  //     itemWidth:10,
  //     itemGap: 10,//设置图例的间距
  //     icon: "rect",// 图例项的icon,类型包括 circle(圆形),rect(正方形),
  //     				//roundRect(圆角正方形),triangle(三角形),diamond(菱形),
  //     				//pin(大头针行),arrow(箭头形),none(无图例项的icon)
  //     formatter: (e) => {
  //        let ratio = 0
  //        let value = 0
  //         // return `${e}    ${ratio}%     ${value}车  `
  //         let arr = ['{a|' + e + '}', '{b|' + ratio + '%}','{c|' + value + '}'+'\n{d|}']
  //         // //此处的a,b,c是textStyle里面配置的a,b,c,d可以自定义
  //         return arr.join('')
  //     },
  //     textStyle: {//图例文字的样式
  //        rich: {
  //         d: {
  //               width: '100%',
  //               borderWidth: 0.5,
  //               height:1,
  //               backgroundColor: '1',
  //             },
  //          a: {
  //             width: 120,
  //             align: 'left',
  //             fontSize:20,
  //             color:'1',

  //          },
  //          b: {
  //            width: 100,
  //            align: 'left',
  //            fontSize:20,
  //            color:'1'
  //          },
  //          c:{
  //           width: 60,
  //           align: 'left',
  //           fontSize:20,
  //           color:'1'
  //          }
  //      }
  //    },
  // },
    animationDurationUpdate: 1500,
    animationEasingUpdate: 'quinticInOut',
    color: this.chartColor, // 自定义颜色范围
    series: [
      {
        name: 'Les Miserables',
        type: 'graph',
        layout: 'circular',
        circular: {
          rotateLabel: true
        },
        data: graph.nodes,
        links: graph.links,
        categories: graph.categories,
        roam: true,
        label: {
          position: 'right',
          formatter: '{b}'
        },
        lineStyle: {
          color: 'source',
          curveness: 0.3
        }
      }
    ]
  };
  myChart.setOption(option);

option && myChart.setOption(option);

    }
  }
}
</script>
<style lang="scss" scoped>
.child3{
  padding-top: 110px;
  width: 100%;
  height: 550px;
  display: flex;
  justify-content: space-between;
  background: url(~@images/largeScreen/centerBg.png) no-repeat bottom center;
  background-size: 100% 40%;
}
.left{
  width: 22%;
  height: 100%;
}
.center{
  width: 59%;
height: 100%;
.title{height: 30px;
line-height: 30px;
font-family: PingFangSC, PingFang SC;
font-weight: 500;
font-size: 18px;
color: #FFFFFF;
width: 100%;
text-align: center;
font-style: normal;
text-transform: none;
    background: url(~@images/largeScreen/center.png) no-repeat center center;
  background-size: 100% 30%;
}
}
.right{
  width: 18%;
  height: 395px;
   background: url(~@images/largeScreen/right.png);
  background-size: 100% 100%;
  p{
    padding: 10px;
    width: 100%;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 16px;
color: #FFFFFF;
line-height: 24px;
text-align: left;
font-style: normal;
text-transform: none;
span{
  display: inline-block;
  width: 8px;height: 8px;
  border-radius: 50%;
}
  }
}
.part1{
  width: 100%;height: 23%;
  margin-bottom: 8px;
   background: url(~@images/largeScreen/part1.png);
  background-size: 100% 100%;

  p:first-child{
height: 30%;
line-height: 60px;
font-family: PingFangSC, PingFang SC;
font-weight: 500;
font-size: 18px;
color: #FFFFFF;
width: 100%;
text-align: center;
font-style: normal;
text-transform: none;
  }
    p:last-of-type{
height: 70%;
line-height: 100px;
font-family: AlimamaShuHeiTi, AlimamaShuHeiTi;
font-weight: bold;
font-size: 36px;
color: #28D4FF;
text-align: center;
font-style: normal;
text-transform: none;
  }
}
</style>

child3.json:

{
  "nodes": [
      {
          "id": "0",
          "name": "Myriel",
          "symbolSize": 19.12381,
          "x": -266.82776,
          "y": 299.6904,
          "value": 28.685715,
          "category": 0
      },
      {
          "id": "1",
          "name": "Napoleon",
          "symbolSize": 2.6666666666666665,
          "x": -418.08344,
          "y": 446.8853,
          "value": 4,
          "category": 0
      },
      {
          "id": "2",
          "name": "MlleBaptistine",
          "symbolSize": 6.323809333333333,
          "x": -212.76357,
          "y": 245.29176,
          "value": 9.485714,
          "category": 1
      },
      {
          "id": "3",
          "name": "MmeMagloire",
          "symbolSize": 6.323809333333333,
          "x": -242.82404,
          "y": 235.26283,
          "value": 9.485714,
          "category": 1
      },
      {
          "id": "4",
          "name": "CountessDeLo",
          "symbolSize": 2.6666666666666665,
          "x": -379.30386,
          "y": 429.06424,
          "value": 4,
          "category": 0
      },
      {
          "id": "5",
          "name": "Geborand",
          "symbolSize": 2.6666666666666665,
          "x": -417.26337,
          "y": 406.03506,
          "value": 4,
          "category": 0
      },
      {
          "id": "6",
          "name": "Champtercier",
          "symbolSize": 2.6666666666666665,
          "x": -332.6012,
          "y": 485.16974,
          "value": 4,
          "category": 0
      },
      {
          "id": "7",
          "name": "Cravatte",
          "symbolSize": 2.6666666666666665,
          "x": -382.69568,
          "y": 475.09113,
          "value": 4,
          "category": 0
      },
      {
          "id": "8",
          "name": "Count",
          "symbolSize": 2.6666666666666665,
          "x": -320.384,
          "y": 387.17325,
          "value": 4,
          "category": 0
      },
      {
          "id": "9",
          "name": "OldMan",
          "symbolSize": 2.6666666666666665,
          "x": -344.39832,
          "y": 451.16772,
          "value": 4,
          "category": 0
      },
      {
          "id": "10",
          "name": "Labarre",
          "symbolSize": 2.6666666666666665,
          "x": -89.34107,
          "y": 234.56128,
          "value": 4,
          "category": 1
      },
      {
          "id": "11",
          "name": "Valjean",
          "symbolSize": 66.66666666666667,
          "x": -87.93029,
          "y": -6.8120565,
          "value": 100,
          "category": 1
      },
      {
          "id": "12",
          "name": "Marguerite",
          "symbolSize": 4.495239333333333,
          "x": -339.77908,
          "y": -184.69139,
          "value": 6.742859,
          "category": 1
      },
      {
          "id": "13",
          "name": "MmeDeR",
          "symbolSize": 2.6666666666666665,
          "x": -194.31313,
          "y": 178.55301,
          "value": 4,
          "category": 1
      },
      {
          "id": "14",
          "name": "Isabeau",
          "symbolSize": 2.6666666666666665,
          "x": -158.05168,
          "y": 201.99768,
          "value": 4,
          "category": 1
      },
      {
          "id": "15",
          "name": "Gervais",
          "symbolSize": 2.6666666666666665,
          "x": -127.701546,
          "y": 242.55057,
          "value": 4,
          "category": 1
      },
      {
          "id": "16",
          "name": "Tholomyes",
          "symbolSize": 17.295237333333333,
          "x": -385.2226,
          "y": -393.5572,
          "value": 25.942856,
          "category": 2
      },
      {
          "id": "17",
          "name": "Listolier",
          "symbolSize": 13.638097333333334,
          "x": -516.55884,
          "y": -393.98975,
          "value": 20.457146,
          "category": 2
      },
      {
          "id": "18",
          "name": "Fameuil",
          "symbolSize": 13.638097333333334,
          "x": -464.79382,
          "y": -493.57944,
          "value": 20.457146,
          "category": 2
      },
      {
          "id": "19",
          "name": "Blacheville",
          "symbolSize": 13.638097333333334,
          "x": -515.1624,
          "y": -456.9891,
          "value": 20.457146,
          "category": 2
      },
      {
          "id": "20",
          "name": "Favourite",
          "symbolSize": 13.638097333333334,
          "x": -408.12122,
          "y": -464.5048,
          "value": 20.457146,
          "category": 2
      },
      {
          "id": "21",
          "name": "Dahlia",
          "symbolSize": 13.638097333333334,
          "x": -456.44113,
          "y": -425.13303,
          "value": 20.457146,
          "category": 2
      },
      {
          "id": "22",
          "name": "Zephine",
          "symbolSize": 13.638097333333334,
          "x": -459.1107,
          "y": -362.5133,
          "value": 20.457146,
          "category": 2
      },
      {
          "id": "23",
          "name": "Fantine",
          "symbolSize": 28.266666666666666,
          "x": -313.42786,
          "y": -289.44803,
          "value": 42.4,
          "category": 2
      },
      {
          "id": "24",
          "name": "MmeThenardier",
          "symbolSize": 20.95238266666667,
          "x": 4.6313396,
          "y": -273.8517,
          "value": 31.428574,
          "category": 7
      },
      {
          "id": "25",
          "name": "Thenardier",
          "symbolSize": 30.095235333333335,
          "x": 82.80825,
          "y": -203.1144,
          "value": 45.142853,
          "category": 7
      },
      {
          "id": "26",
          "name": "Cosette",
          "symbolSize": 20.95238266666667,
          "x": 78.64646,
          "y": -31.512747,
          "value": 31.428574,
          "category": 6
      },
      {
          "id": "27",
          "name": "Javert",
          "symbolSize": 31.923806666666668,
          "x": -81.46074,
          "y": -204.20204,
          "value": 47.88571,
          "category": 7
      },
      {
          "id": "28",
          "name": "Fauchelevent",
          "symbolSize": 8.152382000000001,
          "x": -225.73984,
          "y": 82.41631,
          "value": 12.228573,
          "category": 4
      },
      {
          "id": "29",
          "name": "Bamatabois",
          "symbolSize": 15.466666666666667,
          "x": -385.6842,
          "y": -20.206686,
          "value": 23.2,
          "category": 3
      },
      {
          "id": "30",
          "name": "Perpetue",
          "symbolSize": 4.495239333333333,
          "x": -403.92447,
          "y": -197.69823,
          "value": 6.742859,
          "category": 2
      },
      {
          "id": "31",
          "name": "Simplice",
          "symbolSize": 8.152382000000001,
          "x": -281.4253,
          "y": -158.45137,
          "value": 12.228573,
          "category": 2
      },
      {
          "id": "32",
          "name": "Scaufflaire",
          "symbolSize": 2.6666666666666665,
          "x": -122.41348,
          "y": 210.37503,
          "value": 4,
          "category": 1
      },
      {
          "id": "33",
          "name": "Woman1",
          "symbolSize": 4.495239333333333,
          "x": -234.6001,
          "y": -113.15067,
          "value": 6.742859,
          "category": 1
      },
      {
          "id": "34",
          "name": "Judge",
          "symbolSize": 11.809524666666666,
          "x": -387.84915,
          "y": 58.7059,
          "value": 17.714287,
          "category": 3
      },
      {
          "id": "35",
          "name": "Champmathieu",
          "symbolSize": 11.809524666666666,
          "x": -338.2307,
          "y": 87.48405,
          "value": 17.714287,
          "category": 3
      },
      {
          "id": "36",
          "name": "Brevet",
          "symbolSize": 11.809524666666666,
          "x": -453.26874,
          "y": 58.94648,
          "value": 17.714287,
          "category": 3
      },
      {
          "id": "37",
          "name": "Chenildieu",
          "symbolSize": 11.809524666666666,
          "x": -386.44904,
          "y": 140.05937,
          "value": 17.714287,
          "category": 3
      },
      {
          "id": "38",
          "name": "Cochepaille",
          "symbolSize": 11.809524666666666,
          "x": -446.7876,
          "y": 123.38005,
          "value": 17.714287,
          "category": 3
      },
      {
          "id": "39",
          "name": "Pontmercy",
          "symbolSize": 6.323809333333333,
          "x": 336.49738,
          "y": -269.55914,
          "value": 9.485714,
          "category": 6
      },
      {
          "id": "40",
          "name": "Boulatruelle",
          "symbolSize": 2.6666666666666665,
          "x": 29.187843,
          "y": -460.13132,
          "value": 4,
          "category": 7
      },
      {
          "id": "41",
          "name": "Eponine",
          "symbolSize": 20.95238266666667,
          "x": 238.36697,
          "y": -210.00926,
          "value": 31.428574,
          "category": 7
      },
      {
          "id": "42",
          "name": "Anzelma",
          "symbolSize": 6.323809333333333,
          "x": 189.69513,
          "y": -346.50662,
          "value": 9.485714,
          "category": 7
      },
      {
          "id": "43",
          "name": "Woman2",
          "symbolSize": 6.323809333333333,
          "x": -187.00418,
          "y": -145.02663,
          "value": 9.485714,
          "category": 6
      },
      {
          "id": "44",
          "name": "MotherInnocent",
          "symbolSize": 4.495239333333333,
          "x": -252.99521,
          "y": 129.87549,
          "value": 6.742859,
          "category": 4
      },
      {
          "id": "45",
          "name": "Gribier",
          "symbolSize": 2.6666666666666665,
          "x": -296.07935,
          "y": 163.11964,
          "value": 4,
          "category": 4
      },
      {
          "id": "46",
          "name": "Jondrette",
          "symbolSize": 2.6666666666666665,
          "x": 550.3201,
          "y": 522.4031,
          "value": 4,
          "category": 5
      },
      {
          "id": "47",
          "name": "MmeBurgon",
          "symbolSize": 4.495239333333333,
          "x": 488.13535,
          "y": 356.8573,
          "value": 6.742859,
          "category": 5
      },
      {
          "id": "48",
          "name": "Gavroche",
          "symbolSize": 41.06667066666667,
          "x": 387.89572,
          "y": 110.462326,
          "value": 61.600006,
          "category": 8
      },
      {
          "id": "49",
          "name": "Gillenormand",
          "symbolSize": 13.638097333333334,
          "x": 126.4831,
          "y": 68.10622,
          "value": 20.457146,
          "category": 6
      },
      {
          "id": "50",
          "name": "Magnon",
          "symbolSize": 4.495239333333333,
          "x": 127.07365,
          "y": -113.05923,
          "value": 6.742859,
          "category": 6
      },
      {
          "id": "51",
          "name": "MlleGillenormand",
          "symbolSize": 13.638097333333334,
          "x": 162.63559,
          "y": 117.6565,
          "value": 20.457146,
          "category": 6
      },
      {
          "id": "52",
          "name": "MmePontmercy",
          "symbolSize": 4.495239333333333,
          "x": 353.66415,
          "y": -205.89165,
          "value": 6.742859,
          "category": 6
      },
      {
          "id": "53",
          "name": "MlleVaubois",
          "symbolSize": 2.6666666666666665,
          "x": 165.43939,
          "y": 339.7736,
          "value": 4,
          "category": 6
      },
      {
          "id": "54",
          "name": "LtGillenormand",
          "symbolSize": 8.152382000000001,
          "x": 137.69348,
          "y": 196.1069,
          "value": 12.228573,
          "category": 6
      },
      {
          "id": "55",
          "name": "Marius",
          "symbolSize": 35.58095333333333,
          "x": 206.44687,
          "y": -13.805411,
          "value": 53.37143,
          "category": 6
      },
      {
          "id": "56",
          "name": "BaronessT",
          "symbolSize": 4.495239333333333,
          "x": 194.82993,
          "y": 224.78036,
          "value": 6.742859,
          "category": 6
      },
      {
          "id": "57",
          "name": "Mabeuf",
          "symbolSize": 20.95238266666667,
          "x": 597.6618,
          "y": 135.18481,
          "value": 31.428574,
          "category": 8
      },
      {
          "id": "58",
          "name": "Enjolras",
          "symbolSize": 28.266666666666666,
          "x": 355.78366,
          "y": -74.882454,
          "value": 42.4,
          "category": 8
      },
      {
          "id": "59",
          "name": "Combeferre",
          "symbolSize": 20.95238266666667,
          "x": 515.2961,
          "y": -46.167564,
          "value": 31.428574,
          "category": 8
      },
      {
          "id": "60",
          "name": "Prouvaire",
          "symbolSize": 17.295237333333333,
          "x": 614.29285,
          "y": -69.3104,
          "value": 25.942856,
          "category": 8
      },
      {
          "id": "61",
          "name": "Feuilly",
          "symbolSize": 20.95238266666667,
          "x": 550.1917,
          "y": -128.17537,
          "value": 31.428574,
          "category": 8
      },
      {
          "id": "62",
          "name": "Courfeyrac",
          "symbolSize": 24.609526666666667,
          "x": 436.17184,
          "y": -12.7286825,
          "value": 36.91429,
          "category": 8
      },
      {
          "id": "63",
          "name": "Bahorel",
          "symbolSize": 22.780953333333333,
          "x": 602.55225,
          "y": 16.421427,
          "value": 34.17143,
          "category": 8
      },
      {
          "id": "64",
          "name": "Bossuet",
          "symbolSize": 24.609526666666667,
          "x": 455.81955,
          "y": -115.45826,
          "value": 36.91429,
          "category": 8
      },
      {
          "id": "65",
          "name": "Joly",
          "symbolSize": 22.780953333333333,
          "x": 516.40784,
          "y": 47.242233,
          "value": 34.17143,
          "category": 8
      },
      {
          "id": "66",
          "name": "Grantaire",
          "symbolSize": 19.12381,
          "x": 646.4313,
          "y": -151.06331,
          "value": 28.685715,
          "category": 8
      },
      {
          "id": "67",
          "name": "MotherPlutarch",
          "symbolSize": 2.6666666666666665,
          "x": 668.9568,
          "y": 204.65488,
          "value": 4,
          "category": 8
      },
      {
          "id": "68",
          "name": "Gueulemer",
          "symbolSize": 19.12381,
          "x": 78.4799,
          "y": -347.15146,
          "value": 28.685715,
          "category": 7
      },
      {
          "id": "69",
          "name": "Babet",
          "symbolSize": 19.12381,
          "x": 150.35959,
          "y": -298.50797,
          "value": 28.685715,
          "category": 7
      },
      {
          "id": "70",
          "name": "Claquesous",
          "symbolSize": 19.12381,
          "x": 137.3717,
          "y": -410.2809,
          "value": 28.685715,
          "category": 7
      },
      {
          "id": "71",
          "name": "Montparnasse",
          "symbolSize": 17.295237333333333,
          "x": 234.87747,
          "y": -400.85983,
          "value": 25.942856,
          "category": 7
      },
      {
          "id": "72",
          "name": "Toussaint",
          "symbolSize": 6.323809333333333,
          "x": 40.942253,
          "y": 113.78272,
          "value": 9.485714,
          "category": 1
      },
      {
          "id": "73",
          "name": "Child1",
          "symbolSize": 4.495239333333333,
          "x": 437.939,
          "y": 291.58234,
          "value": 6.742859,
          "category": 8
      },
      {
          "id": "74",
          "name": "Child2",
          "symbolSize": 4.495239333333333,
          "x": 466.04922,
          "y": 283.3606,
          "value": 6.742859,
          "category": 8
      },
      {
          "id": "75",
          "name": "Brujon",
          "symbolSize": 13.638097333333334,
          "x": 238.79364,
          "y": -314.06345,
          "value": 20.457146,
          "category": 7
      },
      {
          "id": "76",
          "name": "MmeHucheloup",
          "symbolSize": 13.638097333333334,
          "x": 712.18353,
          "y": 4.8131495,
          "value": 20.457146,
          "category": 8
      }
  ],
  "links": [
      {
          "source": "1",
          "target": "0"
      },
      {
          "source": "2",
          "target": "0"
      },
      {
          "source": "3",
          "target": "0"
      },
      {
          "source": "3",
          "target": "2"
      },
      {
          "source": "4",
          "target": "0"
      },
      {
          "source": "5",
          "target": "0"
      },
      {
          "source": "6",
          "target": "0"
      },
      {
          "source": "7",
          "target": "0"
      },
      {
          "source": "8",
          "target": "0"
      },
      {
          "source": "9",
          "target": "0"
      },
      {
          "source": "11",
          "target": "0"
      },
      {
          "source": "11",
          "target": "2"
      },
      {
          "source": "11",
          "target": "3"
      },
      {
          "source": "11",
          "target": "10"
      },
      {
          "source": "12",
          "target": "11"
      },
      {
          "source": "13",
          "target": "11"
      },
      {
          "source": "14",
          "target": "11"
      },
      {
          "source": "15",
          "target": "11"
      },
      {
          "source": "17",
          "target": "16"
      },
      {
          "source": "18",
          "target": "16"
      },
      {
          "source": "18",
          "target": "17"
      },
      {
          "source": "19",
          "target": "16"
      },
      {
          "source": "19",
          "target": "17"
      },
      {
          "source": "19",
          "target": "18"
      },
      {
          "source": "20",
          "target": "16"
      },
      {
          "source": "20",
          "target": "17"
      },
      {
          "source": "20",
          "target": "18"
      },
      {
          "source": "20",
          "target": "19"
      },
      {
          "source": "21",
          "target": "16"
      },
      {
          "source": "21",
          "target": "17"
      },
      {
          "source": "21",
          "target": "18"
      },
      {
          "source": "21",
          "target": "19"
      },
      {
          "source": "21",
          "target": "20"
      },
      {
          "source": "22",
          "target": "16"
      },
      {
          "source": "22",
          "target": "17"
      },
      {
          "source": "22",
          "target": "18"
      },
      {
          "source": "22",
          "target": "19"
      },
      {
          "source": "22",
          "target": "20"
      },
      {
          "source": "22",
          "target": "21"
      },
      {
          "source": "23",
          "target": "11"
      },
      {
          "source": "23",
          "target": "12"
      },
      {
          "source": "23",
          "target": "16"
      },
      {
          "source": "23",
          "target": "17"
      },
      {
          "source": "23",
          "target": "18"
      },
      {
          "source": "23",
          "target": "19"
      },
      {
          "source": "23",
          "target": "20"
      },
      {
          "source": "23",
          "target": "21"
      },
      {
          "source": "23",
          "target": "22"
      },
      {
          "source": "24",
          "target": "11"
      },
      {
          "source": "24",
          "target": "23"
      },
      {
          "source": "25",
          "target": "11"
      },
      {
          "source": "25",
          "target": "23"
      },
      {
          "source": "25",
          "target": "24"
      },
      {
          "source": "26",
          "target": "11"
      },
      {
          "source": "26",
          "target": "16"
      },
      {
          "source": "26",
          "target": "24"
      },
      {
          "source": "26",
          "target": "25"
      },
      {
          "source": "27",
          "target": "11"
      },
      {
          "source": "27",
          "target": "23"
      },
      {
          "source": "27",
          "target": "24"
      },
      {
          "source": "27",
          "target": "25"
      },
      {
          "source": "27",
          "target": "26"
      },
      {
          "source": "28",
          "target": "11"
      },
      {
          "source": "28",
          "target": "27"
      },
      {
          "source": "29",
          "target": "11"
      },
      {
          "source": "29",
          "target": "23"
      },
      {
          "source": "29",
          "target": "27"
      },
      {
          "source": "30",
          "target": "23"
      },
      {
          "source": "31",
          "target": "11"
      },
      {
          "source": "31",
          "target": "23"
      },
      {
          "source": "31",
          "target": "27"
      },
      {
          "source": "31",
          "target": "30"
      },
      {
          "source": "32",
          "target": "11"
      },
      {
          "source": "33",
          "target": "11"
      },
      {
          "source": "33",
          "target": "27"
      },
      {
          "source": "34",
          "target": "11"
      },
      {
          "source": "34",
          "target": "29"
      },
      {
          "source": "35",
          "target": "11"
      },
      {
          "source": "35",
          "target": "29"
      },
      {
          "source": "35",
          "target": "34"
      },
      {
          "source": "36",
          "target": "11"
      },
      {
          "source": "36",
          "target": "29"
      },
      {
          "source": "36",
          "target": "34"
      },
      {
          "source": "36",
          "target": "35"
      },
      {
          "source": "37",
          "target": "11"
      },
      {
          "source": "37",
          "target": "29"
      },
      {
          "source": "37",
          "target": "34"
      },
      {
          "source": "37",
          "target": "35"
      },
      {
          "source": "37",
          "target": "36"
      },
      {
          "source": "38",
          "target": "11"
      },
      {
          "source": "38",
          "target": "29"
      },
      {
          "source": "38",
          "target": "34"
      },
      {
          "source": "38",
          "target": "35"
      },
      {
          "source": "38",
          "target": "36"
      },
      {
          "source": "38",
          "target": "37"
      },
      {
          "source": "39",
          "target": "25"
      },
      {
          "source": "40",
          "target": "25"
      },
      {
          "source": "41",
          "target": "24"
      },
      {
          "source": "41",
          "target": "25"
      },
      {
          "source": "42",
          "target": "24"
      },
      {
          "source": "42",
          "target": "25"
      },
      {
          "source": "42",
          "target": "41"
      },
      {
          "source": "43",
          "target": "11"
      },
      {
          "source": "43",
          "target": "26"
      },
      {
          "source": "43",
          "target": "27"
      },
      {
          "source": "44",
          "target": "11"
      },
      {
          "source": "44",
          "target": "28"
      },
      {
          "source": "45",
          "target": "28"
      },
      {
          "source": "47",
          "target": "46"
      },
      {
          "source": "48",
          "target": "11"
      },
      {
          "source": "48",
          "target": "25"
      },
      {
          "source": "48",
          "target": "27"
      },
      {
          "source": "48",
          "target": "47"
      },
      {
          "source": "49",
          "target": "11"
      },
      {
          "source": "49",
          "target": "26"
      },
      {
          "source": "50",
          "target": "24"
      },
      {
          "source": "50",
          "target": "49"
      },
      {
          "source": "51",
          "target": "11"
      },
      {
          "source": "51",
          "target": "26"
      },
      {
          "source": "51",
          "target": "49"
      },
      {
          "source": "52",
          "target": "39"
      },
      {
          "source": "52",
          "target": "51"
      },
      {
          "source": "53",
          "target": "51"
      },
      {
          "source": "54",
          "target": "26"
      },
      {
          "source": "54",
          "target": "49"
      },
      {
          "source": "54",
          "target": "51"
      },
      {
          "source": "55",
          "target": "11"
      },
      {
          "source": "55",
          "target": "16"
      },
      {
          "source": "55",
          "target": "25"
      },
      {
          "source": "55",
          "target": "26"
      },
      {
          "source": "55",
          "target": "39"
      },
      {
          "source": "55",
          "target": "41"
      },
      {
          "source": "55",
          "target": "48"
      },
      {
          "source": "55",
          "target": "49"
      },
      {
          "source": "55",
          "target": "51"
      },
      {
          "source": "55",
          "target": "54"
      },
      {
          "source": "56",
          "target": "49"
      },
      {
          "source": "56",
          "target": "55"
      },
      {
          "source": "57",
          "target": "41"
      },
      {
          "source": "57",
          "target": "48"
      },
      {
          "source": "57",
          "target": "55"
      },
      {
          "source": "58",
          "target": "11"
      },
      {
          "source": "58",
          "target": "27"
      },
      {
          "source": "58",
          "target": "48"
      },
      {
          "source": "58",
          "target": "55"
      },
      {
          "source": "58",
          "target": "57"
      },
      {
          "source": "59",
          "target": "48"
      },
      {
          "source": "59",
          "target": "55"
      },
      {
          "source": "59",
          "target": "57"
      },
      {
          "source": "59",
          "target": "58"
      },
      {
          "source": "60",
          "target": "48"
      },
      {
          "source": "60",
          "target": "58"
      },
      {
          "source": "60",
          "target": "59"
      },
      {
          "source": "61",
          "target": "48"
      },
      {
          "source": "61",
          "target": "55"
      },
      {
          "source": "61",
          "target": "57"
      },
      {
          "source": "61",
          "target": "58"
      },
      {
          "source": "61",
          "target": "59"
      },
      {
          "source": "61",
          "target": "60"
      },
      {
          "source": "62",
          "target": "41"
      },
      {
          "source": "62",
          "target": "48"
      },
      {
          "source": "62",
          "target": "55"
      },
      {
          "source": "62",
          "target": "57"
      },
      {
          "source": "62",
          "target": "58"
      },
      {
          "source": "62",
          "target": "59"
      },
      {
          "source": "62",
          "target": "60"
      },
      {
          "source": "62",
          "target": "61"
      },
      {
          "source": "63",
          "target": "48"
      },
      {
          "source": "63",
          "target": "55"
      },
      {
          "source": "63",
          "target": "57"
      },
      {
          "source": "63",
          "target": "58"
      },
      {
          "source": "63",
          "target": "59"
      },
      {
          "source": "63",
          "target": "60"
      },
      {
          "source": "63",
          "target": "61"
      },
      {
          "source": "63",
          "target": "62"
      },
      {
          "source": "64",
          "target": "11"
      },
      {
          "source": "64",
          "target": "48"
      },
      {
          "source": "64",
          "target": "55"
      },
      {
          "source": "64",
          "target": "57"
      },
      {
          "source": "64",
          "target": "58"
      },
      {
          "source": "64",
          "target": "59"
      },
      {
          "source": "64",
          "target": "60"
      },
      {
          "source": "64",
          "target": "61"
      },
      {
          "source": "64",
          "target": "62"
      },
      {
          "source": "64",
          "target": "63"
      },
      {
          "source": "65",
          "target": "48"
      },
      {
          "source": "65",
          "target": "55"
      },
      {
          "source": "65",
          "target": "57"
      },
      {
          "source": "65",
          "target": "58"
      },
      {
          "source": "65",
          "target": "59"
      },
      {
          "source": "65",
          "target": "60"
      },
      {
          "source": "65",
          "target": "61"
      },
      {
          "source": "65",
          "target": "62"
      },
      {
          "source": "65",
          "target": "63"
      },
      {
          "source": "65",
          "target": "64"
      },
      {
          "source": "66",
          "target": "48"
      },
      {
          "source": "66",
          "target": "58"
      },
      {
          "source": "66",
          "target": "59"
      },
      {
          "source": "66",
          "target": "60"
      },
      {
          "source": "66",
          "target": "61"
      },
      {
          "source": "66",
          "target": "62"
      },
      {
          "source": "66",
          "target": "63"
      },
      {
          "source": "66",
          "target": "64"
      },
      {
          "source": "66",
          "target": "65"
      },
      {
          "source": "67",
          "target": "57"
      },
      {
          "source": "68",
          "target": "11"
      },
      {
          "source": "68",
          "target": "24"
      },
      {
          "source": "68",
          "target": "25"
      },
      {
          "source": "68",
          "target": "27"
      },
      {
          "source": "68",
          "target": "41"
      },
      {
          "source": "68",
          "target": "48"
      },
      {
          "source": "69",
          "target": "11"
      },
      {
          "source": "69",
          "target": "24"
      },
      {
          "source": "69",
          "target": "25"
      },
      {
          "source": "69",
          "target": "27"
      },
      {
          "source": "69",
          "target": "41"
      },
      {
          "source": "69",
          "target": "48"
      },
      {
          "source": "69",
          "target": "68"
      },
      {
          "source": "70",
          "target": "11"
      },
      {
          "source": "70",
          "target": "24"
      },
      {
          "source": "70",
          "target": "25"
      },
      {
          "source": "70",
          "target": "27"
      },
      {
          "source": "70",
          "target": "41"
      },
      {
          "source": "70",
          "target": "58"
      },
      {
          "source": "70",
          "target": "68"
      },
      {
          "source": "70",
          "target": "69"
      },
      {
          "source": "71",
          "target": "11"
      },
      {
          "source": "71",
          "target": "25"
      },
      {
          "source": "71",
          "target": "27"
      },
      {
          "source": "71",
          "target": "41"
      },
      {
          "source": "71",
          "target": "48"
      },
      {
          "source": "71",
          "target": "68"
      },
      {
          "source": "71",
          "target": "69"
      },
      {
          "source": "71",
          "target": "70"
      },
      {
          "source": "72",
          "target": "11"
      },
      {
          "source": "72",
          "target": "26"
      },
      {
          "source": "72",
          "target": "27"
      },
      {
          "source": "73",
          "target": "48"
      },
      {
          "source": "74",
          "target": "48"
      },
      {
          "source": "74",
          "target": "73"
      },
      {
          "source": "75",
          "target": "25"
      },
      {
          "source": "75",
          "target": "41"
      },
      {
          "source": "75",
          "target": "48"
      },
      {
          "source": "75",
          "target": "68"
      },
      {
          "source": "75",
          "target": "69"
      },
      {
          "source": "75",
          "target": "70"
      },
      {
          "source": "75",
          "target": "71"
      },
      {
          "source": "76",
          "target": "48"
      },
      {
          "source": "76",
          "target": "58"
      },
      {
          "source": "76",
          "target": "62"
      },
      {
          "source": "76",
          "target": "63"
      },
      {
          "source": "76",
          "target": "64"
      },
      {
          "source": "76",
          "target": "65"
      },
      {
          "source": "76",
          "target": "66"
      }
  ],
  "categories": [
      {
          "name": "A"
      },
      {
          "name": "B"
      },
      {
          "name": "C"
      },
      {
          "name": "D"
      },
      {
          "name": "E"
      },
      {
          "name": "F"
      },
      {
          "name": "G"
      },
      {
          "name": "H"
      },
      {
          "name": "I"
      }
  ]
}

 效果:

 3、开发柱形图

<!--
  *@description
  *@fileName src\components\largeScreen\childComponents\child4.vue
  *@author [jianzhen]
  *@date 2024/04/16 16:06:35
!-->
<template>
  <div class="child4">
    <div class="tabBox">
      <div
        @click="checkedBigTabFn(0)"
        class="tab"
        :class="bigTabIndex == 0 ? 'checkedTab' : ''"
      >
        本月
      </div>
      <div
        @click="checkedBigTabFn(1)"
        class="tab"
        :class="bigTabIndex == 1 ? 'checkedTab' : ''"
      >
        本季
      </div>
      <div
        @click="checkedBigTabFn(2)"
        class="tab"
        :class="bigTabIndex == 2 ? 'checkedTab' : ''"
      >
        本年
      </div>
    </div>
    <div class="view">
      <div class="viewBox">
        <div
          class="tabView"
          @click="checkedLittleTabFn(0)"
          :class="littleTabIndex == 0 ? 'checkedIt' : ''"
        >
          单位舆情事件统计
        </div>
        &emsp;&emsp;
        <div
          class="tabView"
          @click="checkedLittleTabFn(1)"
          :class="littleTabIndex == 1 ? 'checkedIt' : ''"
        >
          单位舆情传播统计
        </div>
      </div>
      <div style="width:990px;height:269px" id="chart4"></div>
    </div>
  </div>
</template>
<script>
import * as echarts from "echarts";

export default {
  data() {
    return {
      bigTabIndex: 0,
      littleTabIndex: 0
    };
  },
  mounted() {
    this.setCharts();
  },
  methods: {
    checkedBigTabFn(type) {
      this.bigTabIndex = type;
      this.littleTabIndex = 0;
      this.setCharts();
    },
    checkedLittleTabFn(type) {
      this.littleTabIndex = type;
      this.setCharts();
    },
    setCharts() {
      var myChart = echarts.init(document.getElementById("chart4"));
      let option = {
        xAxis: {
          type: "category",
          data: [
            "Mon",
            "Tue",
            "Wed",
            "Thu",
            "Fri",
            "Sat",
            "Sun",
            "Tue",
            "Wed",
            "Thu",
            "Fri",
            "Sat",
            "Sun",
            "Tue",
            "Wed",
            "Thu",
            "Fri",
            "Sat",
            "Sun"
          ],
          triggerEvent: true, //隐藏文字
          axisLine: {
            lineStyle: {
              color: "#fff" // 这里设置刻度线颜色#47B3FF
            }
          },
          axisTick: {
            show: true,
            lineStyle: {
              color: 'transparent' // #fff这里设置刻度颜色#47B3FF
            }
          },
          axisLabel: {
            margin: 10,
            formatter: function(params) {
              var val = "";
              if (params.length > 5) {
                val = params.substr(0, 5) + "...";
                return val;
              } else {
                return params;
              }
            },

            textStyle: {
              fontSize: 12
            },
            rotate: 45
          } // 设置标签倾斜角度,单位为度
        },
        yAxis: {
          type: "value",
          show: false
        },
        series: [
          {
            data: [
              120,
              200,
              150,
              80,
              70,
              110,
              130,
              200,
              150,
              80,
              70,
              110,
              130,
              200,
              150,
              80,
              70,
              110,
              130
            ],
            type: "bar",
            barMaxWidth: 50, // 设置柱子宽度
            emphasis: {},
            itemStyle: {
              color: new echarts.graphic.LinearGradient(
                0,
                0,
                0,
                1, // 渐变方向,从上到下
                [
                  {
                    offset: 0,
                    color: this.littleTabIndex == 0 ? "#70E3FE" : "#A9FAE0"
                  }, // 柱图渐变色 选中第二个tab后
                  // {offset: 0.5, color: '#188df0'}, // 柱图渐变色
                  {
                    offset: 1,
                    color: this.littleTabIndex == 0 ? "#2389FF" : "#4BBAE7"
                  } // 柱图渐变色  选中第二个tab后#4BBAE7
                ]
              )
            }
          }
        ]
      };
      myChart.setOption(option);
      myChart.resize();
    }
  }
};
</script>
<style lang="scss" scoped>
.child4 {
  width: 100%;
  height: 384px;
}
.tabBox {
  height: 35px;
  line-height: 35px;
  display: flex;
  .tab {
    cursor: pointer;
    width: 140px;
    height: 100%;
    background: url(~@images/largeScreen/noChecked.png) no-repeat;
    background-size: 100% 100%;
    font-family: PingFangSC, PingFang SC;
    font-weight: 500;
    font-size: 18px;
    color: #999999;
    text-align: center;
    font-style: normal;
    text-transform: none;
  }
  .checkedTab {
    background: url(~@images/largeScreen/checked.png) no-repeat !important;
    background-size: 100% 100% !important;
    color: #28d4ff !important;
  }
}
.view {
  width: 100%;
  height: 349px;
  background: url(~@images/largeScreen/child4.png);
  background-size: 100% 100%;
  .viewBox {
    height: 80px;
    width: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
  }
  .tabView {    cursor: pointer;

    font-family: PingFangSC, PingFang SC;
    font-weight: 400;
    font-size: 24px;
    color: #ffffff;

    font-style: normal;
    text-transform: none;
  }
  .checkedIt {
    color: #28d4ff;
  }
}
</style>

效果:

4、仿vue-seamless-scroll插件写组件实现页面元素无缝滚动

 组件

<template>
  <div class="listScroll" ref="box">
    <slot></slot>
    <slot></slot>
  </div>
</template>

<script>
export default {
  name: "listScroll",
    data() {
    return {
      height: 0,
      isScroll: true,
    };
  },
  created() {},
  mounted() {
    //在盒子内容高度小于可视高度时不滚动
    if (this.boxHeight < this.ele0.clientHeight) {

      this.start(this.height);
      this.setEvet();
    } else {
      this.isScroll = false;
    }
  },
  props: {
    speed: {
      default: 1,
      type: Number,
    },
  },
  computed: {
    //第一个slot
    ele0() {
      return this.$refs.box.children[0];
    },
    //第二个slot
    ele1() {
      return this.$refs.box.children[1];
    },
    //盒子的可视高度
    boxHeight() {
      return this.$refs.box.clientHeight;
    },
  },

  methods: {
    //鼠标移入停止滚动 移出继续滚动
    setEvet() {
      this.$refs.box.onmouseenter = () => {
        this.isScroll = false;
        // this.height = 0;
      };
      this.$refs.box.onmouseleave = () => {
        this.isScroll = true;
        this.$nextTick(() => {
          this.start(this.height);
        });
      };
    },
    //滚动方法
    start(height) {
      this.ele0.style = `transform:translateY(-${height}px);`;
      this.ele1.style = `height:${this.boxHeight}px;transform:translateY(-${height}px);overflow: hidden;`;
      if (height >= this.ele0.clientHeight) {
        this.height = 0;
      } else {
        this.height += this.speed;
      }
      if (!this.isScroll) return;
      window.requestAnimationFrame(() => {
        this.start(this.height);
      });
    },
  },
};
</script>

<style lang="less" scoped>
.listScroll {
  overflow: hidden;
}
.hover {
  overflow-y: auto;
}
.hide {
  display: none;
}
</style>

引用

<template>
  <div class="scroll child2">
    <list-scroll class="box" :speed="0.2">
      <div class="list">
        <div class="item" v-for="item in list" :key="item.xh">
          <p>{{ item.label }}</p>
        </div>
      </div>
    </list-scroll>
  </div>
</template>

<script>
import ListScroll from "./listScroll.vue";
export default {
  name: "scroll",
  components: { ListScroll },
  data() {
    return {
      list: new Array(10)
        .fill(1)
        .map((s, i) => ({ xh: i + 1, label: "奋发图强奋发图强奋发图强在盒子内容高度小于可视高度时不滚动" })),
    };
  },
};
</script>

<style lang="less" scoped>
.box {
  height: 420px;
}
.list {
  padding: 0 10px;
  width: 100%;
  .item {
    display: flex;
    justify-content: space-between;
    padding: 5px 0;
    // cursor: pointer;
    // &:hover {
    //   background-color: #95a5a6;
    // }
  }
}
.child2 {
  width: 100%;
  height: 600px;
}
p {width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  padding-left: 10px;
  padding-right: 10px;
  font-family: PingFangSC, PingFang SC;
  font-weight: 500;
  font-size: 18px;
  color: #ffffff;
  line-height: 40px;
  text-align: left;
  font-style: normal;
  text-transform: none;
  border-bottom: 1px dashed #397cf5;
  // &:last-of-type {
  //   border: none !important;
  // }
}
</style>

八、开发习惯讲解

1、calc

相信很多人都发现我在大屏开发中很少用calc,calc主要是为了避免在IE盒子(模糊盒子)盒子width不包含padding和border的情况下内部盒子超出包含它的盒子这种情况使用,当然在做一些类似媒体查询效果的时候也很有效,窗口大小改变视图改变。现如今我们都会在单页面应用的最外层样式处设置border-sizing实现标准盒模型模式,也就避免了上述超出外盒子问题,所以我很少用calc,相关文章(前端面试:calc函数 ---css3语法_calc()-CSDN博客)

九、开发完成最终效果

(此时未与后端联调),与后端调试给页面注入数据期间肯定要做很多数据拆解重组之类的工作,需要消耗不少时间,此外还有各种细节调整有待商榷,不过到这里整体开发工作已经完成大部分了。

1、第一版

2、第二版 

十、后续调整

1、

Echarts网格颜色渐变 + 折线图折线发光高亮效果_echarts折线图拐点发光-CSDN博客

2、

3、 

文章传送门:大屏大概是怎么个开发法(前端)_大屏开发-CSDN博客

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

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

相关文章

Windows使用freeSSHd搭建sftp服务器

一、安装 1、运行freeSSHd.exe&#xff08;最好以管理员方式运行&#xff09; 2、选择安装位置 3、选择全部安装 4、是否创建开始启动栏快捷入口 5、是否创建桌面快捷方式 6、安装 7、安装完成&#xff0c;点击close 8、安装私钥 9、是否要安装为服务 10、全部安装完成 二、配…

强固型工业电脑在码头智能化,龙门吊/流机车载电脑的行业应用

码头智能化行业应用 对码头运营来说&#xff0c;如何优化集装箱从船上到码头堆场到出厂区的各个流程以及达到提高效率。 降低成本的目的&#xff0c;是码头营运获利最重要的议题。为了让集装箱码头客户能够安心使用TOS系统来调度指挥码头上各种吊车、叉车、拖车和人员&#xf…

Linux内核之slab、slub内存分配器实例用法区别(五十八)

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

从零实现诗词GPT大模型:实现Transformer架构

专栏规划: https://qibin.blog.csdn.net/article/details/137728228 首先说明一下,跟其他文章不太一样,在本篇文章中不会对Transformer架构中的自注意力机制进行讲解,而是后面单独1~2篇文章详细讲解自注意力机制,我认为由浅入深的先了解Transformer整体架构和其中比较简单…

Drive Scope for Mac:硬盘健康监测分析工具

Drive Scope for Mac是一款专为Mac用户设计的硬盘健康监测与分析工具&#xff0c;致力于保障用户的数据安全。这款软件功能强大且操作简便&#xff0c;能够实时检测硬盘的各项指标&#xff0c;帮助用户及时发现并解决潜在问题。 Drive Scope for Mac 1.2.23注册激活版下载 Driv…

在RISC-V64架构的CV1811C开发板上应用perf工具进行多线程程序性能分析及火焰图调试

CV1811C环境编译 SDK目录结构 . ├── build // 编译目录,存放编译脚本以及各board差异化配置 ├── buildroot-2021.05 // buildroot开源工具 ├── freertos // freertos系统 ├── fsbl // fsbl启动固件,prebuilt形式存在…

mklink 命令的使用(适用场景:C盘爆满,转移到其他盘)

一、背景 将Oracle数据库安装在D盘&#xff0c;由于磁盘爆满&#xff0c;需要将数据库转移到其他磁盘&#xff08;如&#xff1a;J盘&#xff09;。 在移动数据库之后&#xff0c;会出现数据库无法使用的情况&#xff0c;这时该如何解决&#xff1f;经了解&#xff0c;可以使用…

基于Hadoop的电商用户行为分析系统设计与实现的系统架构设计

采集层&#xff1a;利用Flume采集电商服务器端用户行为数据&#xff0c;把数据处理后发送至HDFS。 存储层&#xff1a;用户行为数据采集上传至HDFS存储&#xff0c; 导入到数据仓库Hive进行计算处理&#xff0c;分析结果保存至MySql数据库中。 计算层&#xff1a;根据分析需求建…

基于Java+SpringBoot+vue动物救助平台设计和实现

基于JavaSpringBootvue动物救助平台设计和实现 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 &#…

rancher-rke2 修改--service-cluster-ip-range

一、场景 因为需要部署新版本的ingress-nginx&#xff0c;而部署ingress-nginx的时候需要使用hostnetowrk以及nodeport的端口为80和443&#xff0c;service-node-port-range 默认为30000开始,部署会报错。 二、产生修改的需求 1、api-servier的配置文件位置 默认是没有的&…

基于STM32的蓝牙小车的Proteus仿真(虚拟串口模拟)

文章目录 一、前言二、仿真图1.要求2.思路3.画图3.1 电源部分3.2 超声波测距部分3.3 电机驱动部分3.4 按键部分3.5 蓝牙部分3.6 显示屏部分3.7 整体 4.仿真5.软件 三、总结 一、前言 proteus本身并不支持蓝牙仿真&#xff0c;这里我采用虚拟串口的方式来模拟蓝牙控制。 这里给…

【PyTorch】torch.gather() 用法

gather常被用于image做mask的操作中&#xff0c;对哪些地方进行赋值0/1 API&#xff1a; torch.gather — PyTorch 2.2 documentation torch.gather(input, dim, index, outNone) → Tensor gather()的意义&#xff1a; 顾名思义&#xff0c;聚集、集合&#xff1a;gather…

java-单列集合List详解

一、List概述 ​​​​​​​List 接口继承自 Collection 接口。这意味着所有 List 类型的对象都是 Collection 类型的对象&#xff0c;它们共享 Collection 接口中定义的所有方法。 List集合的特点&#xff1a; 1、有序&#xff1a;存和取得元素顺序一致 2、有索引&#xf…

在一台笔记本电脑上试用Ubuntu22.04

在一台笔记本电脑上试用Ubuntu22.04。 本来想看以下该操作系统能否识别笔记本电脑上的硬盘&#xff0c;于是下载试一下。选了一个国内镜像网站下载。下载速度很快。下载以后用软件win image 将下载的iso文件写到U盘上&#xff0c;用的是usb2.0的U盘&#xff0c;该操作用时11分…

Oracle之SQL plus的一些经验心得

每次登入SQL plus后,不知道时哪个用户登入,非常不方便,只能使用show user查看。 以下时可以通过一些设置实现上述的效果,知道时哪个用户登入,和实现输出效果等 1)SQL plus使用细则 SQL plus登录时,我们可以设置一些通用的设置,在每次登入SQL plus的时候生效。 [root@c…

macbook spotlightknowledged 占用 cpu 过高

参考 https://discussions.apple.com/thread/251221314?sortBybesthttps://blog.csdn.net/tree_legend/article/details/136580949

图搜索算法详解

图搜索算法详解 图搜索算法是一种常用的算法技术&#xff0c;广泛应用于计算机科学、人工智能、数据挖掘、网络优化等领域。它的主要目的是在图结构中寻找从起点到终点的最优路径&#xff0c;使得搜索过程更加高效、准确。图搜索算法有多种&#xff0c;包括广度优先搜索、深度优…

MKS 质量MFC流量控制器原理及应用课件PPT

MKS 质量MFC流量控制器原理及应用课件PPT

2、关于数据库事务那些事

目录 1、什么是事务&#xff1f; 2、介绍下数据库事务&#xff1f; 3、并发事务会带来什么问题&#xff1f; 3.1、不可重复读和幻读有什么区别&#xff1f; 4、数据库隔离级别有哪几种&#xff1f; 5、MySQL默认使用隔离级别是啥&#xff1f; 6、如何控制并发事务&#…

TCP 协议特性

1. TCP 基本认识 TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。 面向连接&#xff1a;一定是「一对一」才能连接&#xff0c;不能像 UDP 协议可以一个主机同时向多个主机发送消息&#xff0c;也就是一对多是无法做到的&#xff1b; 可靠的&#xff1a;无论的网络链…