VueJS + canvas でレスポンシブなcanvasの生成でつまずいた時

環境:

vue@2.6.12

konva@7.1.1

 

dialog内でcanvas生成時、width, height を指定するのでその値をリアクティブに取得したいがdialogのtoggle等でDOM生成前に値を0で取得してしまい、うまくcanvas が描画できない場合

mounted() {

  this.resizeStage()

  this.$nextTick(() => {

    this.loadKonva()

  })

}

method: {

  resizeStage() {

    this.stageSize.width = document.getElementById("canvas").clientWidth

    this.stageSize.height = this.stageSize.width  / this.aspectRatio

  },

  f:id:monteecristoo:20201010000253p:plain

  以降割愛

}

 

dialogを一回目に開いたときは、mountedからのresizeStage()により正常に動作するが、一度閉じた後また開くと、正しい値が取得できず0をstageSize.widthに指定してしまう。

 

solution)

watch: {} を使って値の変化をリスニングしてそれに応じたFuncをコール

 

watch() {

  'dialogStatus'() {

    this.resizeStage()

  },

  'stageSize.width'() {

    if(this.stageSize.width) {

      this.loadKonva()

    }

  }

}

ref:

monteecristoo.hatenablog.comtorisky.com

Vue.js&Nuxt.js超入門

Vue.js&Nuxt.js超入門