Sheet: allow controlling the enter/exit speed (opens ~2x slower than a CSS sheet)

オープン
#10,898 コメント 1 件 リアクション 1 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
18/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
活発
技術スタック
react, typescript
領域
frontend

調査の方向性

The payload points at the onEnter handler, which smooth-scrolls the scroller by enteredScroll / 100 * vp, so start by reading how Sheet computes that scroll distance and where its scroll behaviour is set. Three possible approaches are listed (sheet-sized travel, a JS scroll animation, or a duration prop), and the thread does not choose one, so a maintainer decision on the API is needed first. Done would mean a chosen approach that makes the sheet start moving on the first frame and is covered by a browser test, with the related issues #10854 and #10877 checked for overlap.

索引モデルが issue の本文から書いたものです。

説明

Provide a general summary of the feature here

A way to control how fast a Sheet slides in and out. Right now it uses scrollTo({ behavior: 'smooth' }) over a full viewport of scroll, so the browser picks the speed and a regular-size sheet takes about twice as long to open as a typical CSS sheet animation.

🤔 Expected Behavior?

Apps can make a sheet open about as fast as their other overlays, for example around 250 to 300ms, and it starts moving right away.

😯 Current Behavior

onEnter smooth-scrolls the scroller a whole viewport (enteredScroll / 100 * vp), not the sheet's size. The first part of that scroll moves through empty space, so a sheet smaller than the viewport doesn't show up until partway through, and the total time is up to the browser.

Measured in Chromium (Vitest browser mode, rAF sampling of the sheet's position after pressing the trigger):

Sheet Viewport First visible Fully open
right, 400px wide 1024×768 ~190ms ~540ms
bottom, 500px tall 390×844 ~150ms ~490ms
bottom, 500px tall 1024×1300 ~200ms ~590ms

The CSS drawer we replaced with Sheet used a 250ms transition and moved from the first frame. Moving to Sheet made it feel noticeably slower to our team.

💁 Possible Solution

Some options, from least to most API:

  1. Start the enter scroll from the sheet's own edge instead of a full viewport out, so it moves from the first frame. This seems related to #10854, where the travel also depends on the viewport and not the sheet's size.
  2. Drive the enter and exit with a JS animation of scrollTop/scrollLeft (rAF with an easing curve) instead of native smooth scroll, with a default duration.
  3. Expose a prop like animationDuration (or read a CSS custom property) so apps can match their motion tokens.

We'd rather not replace the scroll ourselves: changing the scroll position while Sheet's own smooth scroll runs is exactly what gets a sheet stuck in #10877.

🔦 Context

We build a Drawer component on Sheet in GoDaddy's design system (Antares) and want swipe-to-dismiss and stacking, but the slower open is the main thing people notice compared to our previous drawer.

💻 Examples

Native iOS sheets take about 500ms, so Sheet isn't far off on phones, but on desktop a side drawer is expected to be quicker, and the ~150–200ms with nothing on screen reads as lag.

🧢 Your Company/Team

GoDaddy

🕷 Tracking Issue

No response

主要言語
TypeScript
スター
16k
フォーク
1.6k
平均マージ
3日 19時間
マージ済み PR(30日)
46

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

adobe/react-spectrum のほかの issue

adobe/react-spectrum の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。