Установите динамическую высоту и ширину для Konva Stage в Vue.js

Я хочу установить высоту и ширину Konva в зависимости от ширины его родительского контейнера. Поскольку я использовал статическое значение для этапа, который

stageConfiguration:{ height: innerWidth * .5, width:innerWidth * 0.5}

И мне нужно обновлять каждый раз, когда я изменяю размер экрана. Есть ли способ установить динамическую высоту и ширину для stageConfiguration. Current Я застрял на этом и ищу способ установить динамическую высоту и ширину.

<template>
<div class="konvaContainer">
   <v-stage :config="stageConfiguration" >
      <v-layer>
             
      </v-layer>
   </v-stage>
</div>
</template>
<script>
export default {
  components: {
    Loading
  },
  data: () => ({
    stageConfiguration: {}
  )},
  methods:
  {
    responsiveStage : function() {
    var container = document.querySelector('.konvaContainer');
    var width = container.clientWidth;
    const stageWidth= width*.5;
    const stageHeight= width *.5;
    this.stageConfiguration ={
      width:stageWidth,
      height:stageHeight
    }
  }}
}
</script>

1 ответ

Вы можете использовать ResizeObserver или же resize событие из окна для обнаружения изменений размера.

Вот решение с ResizeObserver:

<template>
  <div class="container">
    <v-stage ref="stage" :config="stageSize">
      <v-layer>
        <v-circle
          :config="{
            x: stageSize.width / 2,
            y: stageSize.height / 2,
            radius: stageSize.width / 2,
            fill: 'green',
          }"
        />
      </v-layer>
    </v-stage>
  </div>
</template>

<style>
.container {
  width: 100vw;
  height: 100vh;
}
</style>
<script>
export default {
  data() {
    return {
      stageSize: {
        width: 10,
        height: 10,
      },
    };
  },
  mounted() {
    const container = document.querySelector(".container");
    const observer = new ResizeObserver(() => {
      this.stageSize.width = container.offsetWidth;
      this.stageSize.height = container.offsetHeight;
    });
    observer.observe(container);
  },
};
</script>

Демо: https://codesandbox.io/s/vue-konva-change-stage-size-or-resize-tbwec?file=/src/App.vue

Другие вопросы по тегам