最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue中echarts關(guān)系圖動態(tài)增刪節(jié)點以及連線方式

 更新時間:2022年07月31日 16:59:10   作者:JosiahH  
這篇文章主要介紹了vue中echarts關(guān)系圖動態(tài)增刪節(jié)點以及連線方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

echarts關(guān)系圖動態(tài)增刪節(jié)點及連線

首先,echarts的關(guān)系圖有個非??拥牡胤剑褪枪?jié)點的id必須連續(xù),否則增刪之后節(jié)點無法連接!

下面是簡單的演示實現(xiàn),實際要用動態(tài)增刪的話,要復雜的多得多。

我是用的關(guān)系圖是力引導圖

更新后不會重新渲染,只是動態(tài)增加的效果

//假設(shè)你已經(jīng)渲染了關(guān)系圖
test() {
      let option = this.chart.getOption() //獲取option配置項
 
      //START增加節(jié)點,假設(shè)根據(jù)id連線
      // option.series[0].data.push({name: '測試節(jié)點', category: 1, id: 6, des: '測試描述'})
      // option.series[0].links.push({source: 0, target: 6, name: '測試連線'})
      //END 
 
      //刪除節(jié)點START
      let data = option.series[0].data //獲取節(jié)點數(shù)據(jù)
      let link = option.series[0].links //獲取邊的數(shù)據(jù)
      let flag = -1
      for(let i = 0; i<data.length;i++){//假設(shè)刪除id為1的節(jié)點
        if (data[i].id===1){
          data.splice(i,1)
          link.splice(i-1,1)
          flag = i
          break
        }
      }
      for(let i = flag; i<data.length;i++){
        data[i].id--
        if (i!==data.length){
          link[i-1].target--
        }
      }
      //刪除節(jié)點END
 
      //更新關(guān)系圖
      this.chart.setOption(option)
    },

echarts關(guān)系圖vue完整代碼

vue 使用echarts 實現(xiàn)關(guān)系圖,效果如下:

說明: 關(guān)系圖可以有兩種,一種是指定坐標x,y。 另外一種就是通過設(shè)置series屬性

layout: "force",
force: {
          repulsion: [-2, 100], //節(jié)點之間的斥力因子。支持數(shù)組表達斥力范圍,值越大斥力越大。
          gravity: 0.03, //節(jié)點受到的向中心的引力因子。該值越大節(jié)點越往中心點靠攏。
          edgeLength: [20, 200], //邊的兩個節(jié)點之間的距離,這個距離也會受 repulsion:[10, 50]值越小則長度越長
          layoutAnimation: false,
        },

vue全部代碼如下

<template>
? <div class="uni-chart-container">
? ? <div class="uni-bar-charts" :id="id"></div>
? </div>
</template>
<script>
import echarts from "echarts";
import resize from "../mixins/resize";
export default {
? name: "uniGraph",
? mixins: [resize],
? components: {},
? data() {
? ? return {
? ? ? options: {
? ? ? ? title: {
? ? ? ? ? text: "",
? ? ? ? },
? ? ? ? series: [],
? ? ? },
? ? ? barData: [],
? ? ? myChart: null,
? ? ? seriesName: "",
? ? };
? },
? props: {
? ? id: {
? ? ? type: String,
? ? ? require: true,
? ? },
? ? sortMethod: {
? ? ? type: String,
? ? ? default: "desc",
? ? },
? ? title: {
? ? ? type: String,
? ? },
? ? optionsSetup: {
? ? ? type: Object,
? ? ? default: () => {
? ? ? ? return {};
? ? ? },
? ? },
? ? isVertical: {
? ? ? type: Boolean,
? ? ? default: true,
? ? },
? ? chartsData: {
? ? ? type: Object,
? ? ? default: function () {
? ? ? ? return {
? ? ? ? ? nodes: [
? ? ? ? ? ? {
? ? ? ? ? ? ? name: "李志強",
? ? ? ? ? ? ? category: 0,
? ? ? ? ? ? ? symbolSize: 30,
? ? ? ? ? ? ? value: ["確診"],
? ? ? ? ? ? ? color: "#F10F0F",
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? name: "張亮",
? ? ? ? ? ? ? category: 2,
? ? ? ? ? ? ? symbolSize: 30,
? ? ? ? ? ? ? value: ["密接"],
? ? ? ? ? ? ? color: "#FFC001",
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? name: "王飛",
? ? ? ? ? ? ? category: 1,
? ? ? ? ? ? ? symbolSize: 30,
? ? ? ? ? ? ? value: ["次密接"],
? ? ? ? ? ? ? color: "#1D84C6",
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? name: "王麗",
? ? ? ? ? ? ? category: 2,
? ? ? ? ? ? ? symbolSize: 30,
? ? ? ? ? ? ? value: ["密接"],
? ? ? ? ? ? ? color: "#FFC001",
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? name: "符華",
? ? ? ? ? ? ? category: 1,
? ? ? ? ? ? ? symbolSize: 30,
? ? ? ? ? ? ? value: ["次密接"],
? ? ? ? ? ? ? color: "#1D84C6",
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? name: "錢峰",
? ? ? ? ? ? ? category: 1,
? ? ? ? ? ? ? symbolSize: 30,
? ? ? ? ? ? ? value: ["次密接"],
? ? ? ? ? ? ? color: "#1D84C6",
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? name: "吳夢",
? ? ? ? ? ? ? category: 1,
? ? ? ? ? ? ? symbolSize: 30,
? ? ? ? ? ? ? color: "#1D84C6",
? ? ? ? ? ? ? value: ["次密接"],
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? name: "楊月",
? ? ? ? ? ? ? category: 1,
? ? ? ? ? ? ? symbolSize: 30,
? ? ? ? ? ? ? color: "#1D84C6",
? ? ? ? ? ? ? value: ["次密接"],
? ? ? ? ? ? },
? ? ? ? ? ],
? ? ? ? ? links: [
? ? ? ? ? ? {
? ? ? ? ? ? ? source: "李志強",
? ? ? ? ? ? ? target: "張亮",
? ? ? ? ? ? ? linkTip: "聚餐",
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? source: "張亮",
? ? ? ? ? ? ? target: "王飛",
? ? ? ? ? ? ? linkTip: "出現(xiàn)在同一場所",
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? source: "李志強",
? ? ? ? ? ? ? target: "王麗",
? ? ? ? ? ? ? linkTip: "出現(xiàn)在同一場所",
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? source: "張亮",
? ? ? ? ? ? ? target: "錢峰",
? ? ? ? ? ? ? linkTip: "聚餐",
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? source: "張亮",
? ? ? ? ? ? ? target: "符華",
? ? ? ? ? ? ? linkTip: "家庭聚集",
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? source: "張亮",
? ? ? ? ? ? ? target: "楊月",
? ? ? ? ? ? ? linkTip: "出現(xiàn)在同一場所",
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? source: "張亮",
? ? ? ? ? ? ? target: "吳夢",
? ? ? ? ? ? ? linkTip: "出現(xiàn)在同一場所",
? ? ? ? ? ? },
? ? ? ? ? ],
? ? ? ? ? categories: [
? ? ? ? ? ? {
? ? ? ? ? ? ? name: "確診",
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? name: "次密接",
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? name: "密接",
? ? ? ? ? ? },
? ? ? ? ? ],
? ? ? ? };
? ? ? },
? ? },
? ? customColor: {
? ? ? type: Array,
? ? ? default: function () {
? ? ? ? return ["#1890FF"];
? ? ? },
? ? },
? ? // 展示前5條 可傳5
? ? maxL: {
? ? ? default: "auto",
? ? },
? ? codeStatus: {
? ? ? type: Array,
? ? },
? },
? watch: {
? ? chartsData: {
? ? ? deep: true,
? ? ? immediate: true,
? ? ? handler: function (v) {
? ? ? ? let _this = this;
? ? ? ? this.$nextTick(function () {
? ? ? ? ? _this.init();
? ? ? ? });
? ? ? },
? ? },
? },
? beforeDestroy() {
? ? if (!this.myChart) {
? ? ? return;
? ? }
? ? this.myChart.dispose();
? ? this.myChart = null;
? },
? methods: {
? ? init() {
? ? ? //構(gòu)建3d餅狀圖
? ? ? if (this.myChart) this.myChart.dispose();
? ? ? this.myChart = echarts.init(document.getElementById(this.id));
? ? ? this.editorOptions(this.chartsData);
? ? ? // 傳入數(shù)據(jù)生成 option
? ? ? this.myChart.setOption(this.options);
? ? },
? ? editorOptions(val) {
? ? ? let series = this.getSeries(val);
? ? ? var options = {
? ? ? ? tooltip: {
? ? ? ? ? // formatter: (e) => {
? ? ? ? ? // ? console.log(e);
? ? ? ? ? // ? return e.name + e.data.value;
? ? ? ? ? // },
? ? ? ? },
? ? ? ? animationDuration: 1500,
? ? ? ? animationEasingUpdate: "quinticInOut",
? ? ? ? color: this.customColor,
? ? ? ? grid: this.setOptionsMargin(),
? ? ? ? series: series,
? ? ? };
? ? ? this.options = options;
? ? },
? ? getSeries(newData) {
? ? ? const series = [];
? ? ? series.push({
? ? ? ? name: "關(guān)系圖譜",
? ? ? ? type: "graph",
? ? ? ? hoverAnimation: true,
? ? ? ? layout: "force",
? ? ? ? force: {
? ? ? ? ? repulsion: [-2, 100], //節(jié)點之間的斥力因子。支持數(shù)組表達斥力范圍,值越大斥力越大。
? ? ? ? ? gravity: 0.03, //節(jié)點受到的向中心的引力因子。該值越大節(jié)點越往中心點靠攏。
? ? ? ? ? edgeLength: [20, 200], //邊的兩個節(jié)點之間的距離,這個距離也會受 repulsion:[10, 50]值越小則長度越長
? ? ? ? ? layoutAnimation: false,
? ? ? ? },
? ? ? ? nodeScaleRatio: 0.6,
? ? ? ? draggable: true,
? ? ? ? roam: false, //鼠標縮放和平移
? ? ? ? symbol: "circle",
? ? ? ? edgeSymbol: ["circle", "arrow"],
? ? ? ? data: newData.nodes,
? ? ? ? links: newData.links,
? ? ? ? categories: newData.categories,
? ? ? ? cursor: "pointer",
? ? ? ? focusNodeAdjacency: true,
? ? ? ? scaleLimit: {
? ? ? ? ? //所屬組件的z分層,z值小的圖形會被z值大的圖形覆蓋
? ? ? ? ? min: 0, //最小的縮放值
? ? ? ? ? max: 9, //最大的縮放值
? ? ? ? },
? ? ? ? edgeLabel: {
? ? ? ? ? //連接線上文字
? ? ? ? ? normal: {
? ? ? ? ? ? show: true,
? ? ? ? ? ? textStyle: {
? ? ? ? ? ? ? fontSize: 10,
? ? ? ? ? ? },
? ? ? ? ? ? formatter: (e) => {
? ? ? ? ? ? ? return e.name;
? ? ? ? ? ? },
? ? ? ? ? },
? ? ? ? },
? ? ? ? label: {
? ? ? ? ? normal: {
? ? ? ? ? ? show: true,
? ? ? ? ? },
? ? ? ? },
? ? ? ? lineStyle: {
? ? ? ? ? normal: {
? ? ? ? ? ? width: 1.5,
? ? ? ? ? ? curveness: 0,
? ? ? ? ? ? type: "solid",
? ? ? ? ? },
? ? ? ? },
? ? ? });
? ? ? return series;
? ? },
? ? // 邊距設(shè)置
? ? setOptionsMargin() {
? ? ? const optionsSetup = this.optionsSetup;
? ? ? const grid = {
? ? ? ? left: optionsSetup.marginLeft,
? ? ? ? right: optionsSetup.marginRight,
? ? ? ? bottom: optionsSetup.marginBottom,
? ? ? ? top: optionsSetup.marginTop,
? ? ? ? containLabel: true,
? ? ? };
? ? ? return grid;
? ? },
? },
};
</script>
<style lang="scss">
.uni-chart-container,
.uni-bar-charts {
? width: 100%;
? height: 100%;
}
</style>

resize文件如下:debounce可以自行實現(xiàn)

import {
  debounce
} from "@/utils/utils.js";
export default {
  data() {
    return {};
  },
  mounted() {
    this.initListener();
  },
  beforeDestroy() {
    this.destroyListener();
  },
  deactivated() {
    this.destroyListener();
  },
  methods: {
    initListener() {
      window.addEventListener("resize", debounce(this.resize, 100));
    },
    destroyListener() {
      window.removeEventListener("resize", this.resize);
    },
    resize() {
      const {
        myChart
      } = this;
      myChart && myChart.resize();
    },
  },
};

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • Vue(element ui)中操作row參數(shù)的使用方式

    Vue(element ui)中操作row參數(shù)的使用方式

    這篇文章主要介紹了Vue(element ui)中操作row參數(shù)的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • 詳解Vue源碼學習之雙向綁定

    詳解Vue源碼學習之雙向綁定

    這篇文章主要介紹了Vue源碼學習之雙向綁定,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Vue+tracking.js 實現(xiàn)前端人臉檢測功能

    Vue+tracking.js 實現(xiàn)前端人臉檢測功能

    這篇文章主要介紹了Vue+tracking.js 實現(xiàn)前端人臉檢測功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • 前端不用跑項目vscode組件效果所見即所得

    前端不用跑項目vscode組件效果所見即所得

    這篇文章主要為大家介紹了一款不用跑項目的vscode組件所見即所得效果的使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • 解決vue2.x中數(shù)據(jù)渲染以及vuex緩存的問題

    解決vue2.x中數(shù)據(jù)渲染以及vuex緩存的問題

    本篇文章主要介紹了vue2.x中請求之前數(shù)據(jù)顯示以及vuex緩存的問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 解決vue3打包過后空白頁面的情況

    解決vue3打包過后空白頁面的情況

    這篇文章主要介紹了解決vue3打包過后空白頁面的情況,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 安裝vue-cli的簡易過程

    安裝vue-cli的簡易過程

    安裝vue-cli的前提是你已經(jīng)安裝了npm,安裝npm你可以直接下載node的安裝包進行安裝。接下來通過本文給大家介紹安裝vue-cli的簡易過程,感興趣的朋友跟隨腳本之家小編一起學習吧
    2018-05-05
  • Vue數(shù)組的劫持逐步分析講解

    Vue數(shù)組的劫持逐步分析講解

    小編這次要給大家分享的是如何實現(xiàn)vue2.x數(shù)組劫持,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲
    2023-01-01
  • 詳解在不使用ssr的情況下解決Vue單頁面SEO問題

    詳解在不使用ssr的情況下解決Vue單頁面SEO問題

    這篇文章主要介紹了在不使用ssr的情況下解決Vue單頁面SEO問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • elementui中的el-cascader級聯(lián)選擇器的實踐

    elementui中的el-cascader級聯(lián)選擇器的實踐

    本文主要介紹了elementui中的el-cascader級聯(lián)選擇器的實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論

拜泉县| 盐亭县| 洛扎县| 肃宁县| 开江县| 通山县| 阿克陶县| 普定县| 浦城县| 锡林浩特市| 宁强县| 寿光市| 宜宾市| 彭州市| 吉木萨尔县| 柳江县| 宁南县| 遂宁市| 延寿县| 蒙城县| 张家港市| 门头沟区| 枣强县| 乌海市| 福安市| 莆田市| 宝清县| 冀州市| 凤阳县| 乌海市| 通许县| 铜山县| 体育| 乐陵市| 河津市| 揭西县| 连云港市| 防城港市| 平顶山市| 安达市| 陇川县|