所有元件

MotionHeight

高度跟著內容走:收合、展開與內容變化。

WebReact Native內容與尺寸

動手試試

正在準備範例…

最簡用法

Details.jsx
<button onClick={() => setOpen(!open)}>Details</button>
<MotionHeight open={open}>
  <Answer />
</MotionHeight>

它替你處理的事

  • 以動畫過渡到內容的實際高度,測量由元件完成。
  • 展開時內容增減,也會跟著變化。
  • 即使在變化途中,也從畫面上的當下高度開始。
  • 調整頁面大小時會立即適應,而不是延遲追趕新的寬度。
  • 收合的內容保持掛載但隱藏且無法互動,因此狀態會被保留。

適用情境

  • FAQ 中的回答。
  • 可展開的一組設定。
  • 需要為總高度加上動畫的清單(包住 MotionList)。

Props

Prop型別預設值說明
openbooleantruefalse 收合到零高度;內容保持掛載但隱藏且無法互動。
childrenReactNode內容。
aselement'div'要渲染的元素。
transitionTransitionspring時間曲線 { duration, easing } 或彈簧 { tempo: 'spring', spring }。彈簧被中斷時會保留動量。
onMotionComplete(open) => void高度停穩後,帶著 open 執行。

其他 props 會傳給渲染的元素,所以 className、style 與事件處理函式照常可用。

Web 與 React Native

在 Web 上,高度由 Web Animations API 播放,內容維持一般的版面。

在 React Native 上,檢視會裁切內容,並以 JS 驅動為高度加上動畫,因為高度屬於版面配置。

用到它的範例

搜尋

輸入關鍵字搜尋文件。