import { Directive } from 'vue'; export default { mounted(src, binding, vn) { const calc = () => { const height = src.clientHeight; const width = src.clientWidth; // 要素が(一時的に)DOMに存在しないときは計算スキップ if (height === 0) return; binding.value(width, height); }; calc(); // Vue3では使えなくなった // 無くても大丈夫か...? // TODO: ↑大丈夫じゃなかったので解決策を探す //vn.context.$on('hook:activated', calc); const ro = new ResizeObserver((entries, observer) => { calc(); }); ro.observe(src); src._get_size_ro_ = ro; }, unmounted(src, binding, vn) { binding.value(0, 0); src._get_size_ro_.unobserve(src); } } as Directive;