resize.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { debounce } from '@/utils'
  2. export default {
  3. data() {
  4. return {
  5. $_sidebarElm: null,
  6. $_resizeHandler: null
  7. }
  8. },
  9. mounted() {
  10. this.initListener()
  11. },
  12. activated() {
  13. if (!this.$_resizeHandler) {
  14. // avoid duplication init
  15. this.initListener()
  16. }
  17. // when keep-alive chart activated, auto resize
  18. this.resize()
  19. },
  20. beforeDestroy() {
  21. this.destroyListener()
  22. },
  23. deactivated() {
  24. this.destroyListener()
  25. },
  26. methods: {
  27. // use $_ for mixins properties
  28. // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
  29. $_sidebarResizeHandler(e) {
  30. if (e.propertyName === 'width') {
  31. this.$_resizeHandler()
  32. }
  33. },
  34. initListener() {
  35. this.$_resizeHandler = debounce(() => {
  36. this.resize()
  37. }, 100)
  38. window.addEventListener('resize', this.$_resizeHandler)
  39. this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
  40. this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
  41. },
  42. destroyListener() {
  43. window.removeEventListener('resize', this.$_resizeHandler)
  44. this.$_resizeHandler = null
  45. this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
  46. },
  47. resize() {
  48. const { chart } = this
  49. chart && chart.resize()
  50. }
  51. }
  52. }