getClientBoundingRect для условно визуализированного элемента с анимацией в Svelte
Данный условно визуализированный div с раскрывающимся меню. Чтобы рассчитать его положение (чтобы открыть его вверх или вниз), мне нужно получить его высоту и ширину.
Конечно, элемент не получает правильных размеров до того, как будет выполнен переход.
Итак, вопрос в том, как программно отключить переход? Или как мне получить будущее положение элемента, не показывая его?
{#if isOpened}
<div
bind:this={thisMenu}
use:clickOutside
on:click_outside={closeHandler}
class="dropdown absolute left-100p text-gray-600 z-10 w-full animated
rounded-lg"
style={finalStyle}
{isInit ? null : transition:slide }>
<slot name="list" />
</div>
{/if}
1 ответ
Slide -transition использует getComputedStyle, так что, возможно, это то, что вам нужно. Следующее скопировано из функции слайда в репозитории svelte (src/runtime/transition/index.ts). Слайд-функция устанавливает эти значения от нуля до начального значения и обратно.
const style = getComputedStyle(node);
const opacity = +style.opacity;
const height = parseFloat(style.height);
const padding_top = parseFloat(style.paddingTop);
const padding_bottom = parseFloat(style.paddingBottom);
const margin_top = parseFloat(style.marginTop);
const margin_bottom = parseFloat(style.marginBottom);
const border_top_width = parseFloat(style.borderTopWidth);
const border_bottom_width = parseFloat(style.borderBottomWidth);