Установите динамическую высоту и ширину для 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