resize.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import { ref } from 'vue'
  2. import { debounce } from '@/utils/index'
  3. export default function () {
  4. const chart = ref<any>()
  5. const sidebarElm = ref<Element>()
  6. const chartResizeHandler = debounce(
  7. function () {
  8. if (chart.value) {
  9. chart.value.resize()
  10. }
  11. },
  12. 50,
  13. true
  14. )
  15. const sidebarResizeHandler = (e: TransitionEvent) => {
  16. if (e.propertyName === 'width') {
  17. chartResizeHandler()
  18. }
  19. }
  20. const initResizeEvent = () => {
  21. window.addEventListener('resize', chartResizeHandler)
  22. }
  23. const destroyResizeEvent = () => {
  24. window.removeEventListener('resize', chartResizeHandler)
  25. }
  26. const initSidebarResizeEvent = () => {
  27. sidebarElm.value = document.getElementsByClassName('sidebar-container')[0]
  28. if (sidebarElm.value) {
  29. sidebarElm.value.addEventListener('transitionend', sidebarResizeHandler as EventListener)
  30. }
  31. }
  32. const destroySidebarResizeEvent = () => {
  33. if (sidebarElm.value) {
  34. sidebarElm.value.removeEventListener('transitionend', sidebarResizeHandler as EventListener)
  35. }
  36. }
  37. const mounted = () => {
  38. initResizeEvent()
  39. initSidebarResizeEvent()
  40. }
  41. const beforeDestroy = () => {
  42. destroyResizeEvent()
  43. destroySidebarResizeEvent()
  44. }
  45. const activated = () => {
  46. initResizeEvent()
  47. initSidebarResizeEvent()
  48. }
  49. const deactivated = () => {
  50. destroyResizeEvent()
  51. destroySidebarResizeEvent()
  52. }
  53. return {
  54. chart,
  55. chartResizeHandler,
  56. mounted,
  57. beforeDestroy,
  58. activated,
  59. deactivated
  60. }
  61. }