有时候使用canvas会以容器的宽高来填充,当容器div宽高发生变化时需要主动改变canvas的宽高以填充满,以下是vue3中监视div宽高变化的方式,实测有效。
使用watch 监视dom的ResizeObserver
<div id="container" ref="stageRef" class="container-div" />
watch(stageRef, (newBox, oldBox) => {
if (newBox) {
// 监听宽度变化
new ResizeObserver((entries) => {
entries.forEach((entry) => {
console.log('Width changed:', entry.contentRect.width);
lastResize = new Date().getTime()
let tmpResize = lastResize
setTimeout(() => {
if(tmpResize==lastResize){
// 自适应
if(currentWorkShop.value.map){
if(konvaConfig.value.stage){
konvaConfig.value.stage.removeChildren();
}
showTargetMap(currentWorkShop.value)
}
}
}, 300);
});
}).observe(newBox);
}
}, { immediate: false });