From 251637cf17bc64357e87001abd12ccb7dc7f88b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=9D=E5=85=88=E7=91=9E?= <1490493387@qq.com> Date: Mon, 24 Jan 2022 23:54:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=A6=96=E9=A1=B5=E5=9B=BE=E8=A1=A8?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0resize=E8=87=AA=E9=80=82=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/resize.ts | 67 +++++++++++++++++++ src/views/dashboard/components/BarChart.vue | 40 ++++++++--- .../dashboard/components/FunnelChart.vue | 35 ++++++++-- src/views/dashboard/components/PieChart.vue | 33 +++++++-- src/views/dashboard/components/RadarChart.vue | 58 +++++++++++----- src/views/dashboard/index.vue | 23 +++---- 6 files changed, 211 insertions(+), 45 deletions(-) create mode 100644 src/utils/resize.ts diff --git a/src/utils/resize.ts b/src/utils/resize.ts new file mode 100644 index 00000000..7b87e539 --- /dev/null +++ b/src/utils/resize.ts @@ -0,0 +1,67 @@ + +import { ref } from 'vue' +export default function() { + const chart = ref() + const sidebarElm = ref() + + const chartResizeHandler = () => { + if (chart.value) { + chart.value.resize() + } + } + + const sidebarResizeHandler = (e: TransitionEvent) => { + if (e.propertyName === 'width') { + chartResizeHandler() + } + } + + const initResizeEvent = () => { + window.addEventListener('resize', chartResizeHandler) + } + + const destroyResizeEvent = () => { + window.removeEventListener('resize', chartResizeHandler) + } + + const initSidebarResizeEvent = () => { + sidebarElm.value = document.getElementsByClassName('sidebar-container')[0] + if (sidebarElm.value) { + sidebarElm.value.addEventListener('transitionend', sidebarResizeHandler as EventListener) + } + } + + const destroySidebarResizeEvent = () => { + if (sidebarElm.value) { + sidebarElm.value.removeEventListener('transitionend', sidebarResizeHandler as EventListener) + } + } + + const mounted = () => { + initResizeEvent() + initSidebarResizeEvent() + } + + const beforeDestroy = () => { + destroyResizeEvent() + destroySidebarResizeEvent() + } + + const activated = () => { + initResizeEvent() + initSidebarResizeEvent() + } + + const deactivated = () => { + destroyResizeEvent() + destroySidebarResizeEvent() + } + + return { + chart, + mounted, + beforeDestroy, + activated, + deactivated + } +} diff --git a/src/views/dashboard/components/BarChart.vue b/src/views/dashboard/components/BarChart.vue index d4513411..0bfa09fc 100644 --- a/src/views/dashboard/components/BarChart.vue +++ b/src/views/dashboard/components/BarChart.vue @@ -8,8 +8,9 @@