Skip to Content
Overlay Positioning

Overlay Positioning

Inkio์˜ ํŒ์˜ค๋ฒ„/ํ”Œ๋กœํŒ… UI๋Š” ๊ณตํ†ต ์˜ค๋ฒ„๋ ˆ์ด ์—”์ง„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ณด์žฅ ๋ฒ”์œ„

  • ๋ทฐํฌํŠธ ๊ฒฝ๊ณ„ ์ถฉ๋Œ ์‹œ flip
  • ๊ฒฝ๊ณ„ ๋ฐ”๊นฅ์œผ๋กœ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ shift(clamp)
  • ์Šคํฌ๋กค/๋ฆฌ์‚ฌ์ด์ฆˆ/์—˜๋ฆฌ๋จผํŠธ ๋ฆฌ์‚ฌ์ด์ฆˆ ์‹œ ์ž๋™ ์žฌ๊ณ„์‚ฐ
  • position: fixed ๊ธฐ๋ฐ˜ ๊ณ„์‚ฐ์œผ๋กœ inline/inline-block ์ปจํ…์ŠคํŠธ์—์„œ๋„ ์•ˆ์ •์  ๋™์ž‘

์‚ฌ์šฉ API

import { computeOverlayPosition, autoUpdateOverlayPosition, } from '@inkio/editor';

computeOverlayPosition

ํ•ต์‹ฌ ์œ„์น˜ ๊ณ„์‚ฐ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

const result = computeOverlayPosition({ anchorRect, floatingRect, placement: 'top', align: 'center', offset: 8, padding: 8, flip: true, shift: true, });

autoUpdateOverlayPosition

์Šคํฌ๋กค/๋ฆฌ์‚ฌ์ด์ฆˆ/ResizeObserver ๊ธฐ๋ฐ˜ ์ž๋™ ์—…๋ฐ์ดํŠธ ์œ ํ‹ธ์ž…๋‹ˆ๋‹ค.

const cleanup = autoUpdateOverlayPosition({ update: updatePosition, elements: [editorElement, popupElement], }); // unmount ์‹œ cleanup();

์ ์šฉ ์ปดํฌ๋„ŒํŠธ

  • BubbleMenu
  • FloatingMenu
  • SuggestionPopup
  • CommentComposer
  • BlockHandle ๊ธฐ๋ณธ ๋ฉ”๋‰ด

๊ถŒ์žฅ์‚ฌํ•ญ

  • anchor๋Š” ๊ฐ€๋Šฅํ•˜๋ฉด getBoundingClientRect() ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ„์‚ฐ
  • ํฌํ„ธ๋กœ ๋ Œ๋”๋งํ•˜๋Š” ์˜ค๋ฒ„๋ ˆ์ด๋Š” position: fixed ์‚ฌ์šฉ
  • z-index๋Š” ํ† ํฐ(--inkio-layer-*)์„ ํ†ตํ•ด ์ผ๊ด€๋˜๊ฒŒ ๊ด€๋ฆฌ
Last updated on