è§å¾è¿æ¸¡ API
è§å¾è¿æ¸¡ APIï¼View Transition APIï¼æä¾äºä¸ç§è½»æ¾å°å建ä¸åç½ç«è§å¾ä¹é´çå¨ç»è¿æ¸¡çæºå¶ãè¿å æ¬å¨å页åºç¨ï¼SPAï¼ä¸ç DOM ç¶æä¹é´è®¾ç½®å¨ç»ï¼ä»¥åå¨å¤é¡µåºç¨ï¼MPAï¼ä¸çææ¡£ä¹é´ç导èªè®¾ç½®å¨ç»ã
æ¦å¿µåç¨æ³
è§å¾è¿æ¸¡æ¯ä¸ç§æµè¡çè®¾è®¡éæ©ï¼å¯ä»¥åå°ç¨æ·è®¤ç¥è´è·ï¼å¸®å©ä»ä»¬ä¿æä¸ä¸æï¼å¹¶åå°ä»ä»¬å¨åºç¨ç¨åºçç¶ææè§å¾ä¹é´ç§»å¨æ¶æç¥çå 载延è¿ã
使¯ï¼å¨ Web ä¸å建è§å¾è¿æ¸¡åæ¥å¾å°é¾ï¼
- å¨å页åºç¨ç¨åºï¼SPAï¼ä¸ï¼ç¶æä¹é´çè¿æ¸¡å¾å¾éè¦ç¼å大éç CSS å JavaScript æ¥å®ç°ï¼
- å¤çæ°æ§å 容çå è½½åå®ä½ã
- ä¸ºæ°æ§ç¶ææ·»å å¨ç»ä»¥åå»ºè¿æ¸¡ã
- 鲿¢ç¨æ·ä¸æ§å 容çæå¤äº¤äºè导è´çé®é¢ã
- å®æè¿æ¸¡åå 餿§å 容ã ä¹å¯è½ç±äºæ°æ§å 容忶åå¨äº DOM ä¸è导è´åé 读ä½ç½®ä¸¢å¤±ãç¦ç¹æ··ä¹±å宿¶åºå宣åç奿ªè¡ä¸ºçæ éç¢é®é¢
- è·¨ææ¡£è§å¾è¿æ¸¡ï¼å³ MPA ä¸ä¸å页é¢ä¹é´ç导èªï¼å¨åå²ä¸æ¯ä¸å¯è½çã
è§å¾è¿æ¸¡ API 为ä¸è¿°ä¸¤ç§ç¨ä¾æä¾äºä¸ç§ç®åçæ¹æ³æ¥å¤çæéçè§å¾æ´æ¹åè¿æ¸¡å¨ç»ã
åå»ºä½¿ç¨æµè§å¨é»è®¤è¿æ¸¡å¨ç»çè§å¾è¿æ¸¡é常快ï¼å¹¶ä¸æä¸äºç¹æ§å è®¸ä½ ä¸º SPA å MPA è§å¾è¿æ¸¡èªå®ä¹è¿æ¸¡å¨ç»å¹¶æçºµè§å¾è¿æ¸¡æ¬èº«ï¼ä¾å¦æå®è·³è¿å¨ç»çæ åµï¼ã
æå ³æ´å¤ä¿¡æ¯ï¼è¯·åé 使ç¨è§å¾è¿æ¸¡ APIã
æ¥å£
ViewTransition-
表示è§å¾è¿æ¸¡ï¼å¹¶æä¾äºå¨è¿æ¸¡å°è¾¾ä¸åç¶ææ¶è¿è¡ä»£ç ï¼ä¾å¦ï¼åå¤è¿è¡å¨ç»æå¨ç»å®æï¼æè·³è¿è§å¾è¿æ¸¡çåè½ã
å¯¹å ¶ä»æ¥å£çæ©å±
Document.startViewTransition()-
å¼å§æ°çå页ï¼SPAï¼è§å¾è¿æ¸¡å¹¶è¿åä¸ä¸ªè¡¨ç¤ºå®ç
ViewTransition对象ã PageRevealEvent-
pagerevealäºä»¶çäºä»¶å¯¹è±¡ãå¨è·¨ææ¡£å¯¼èªè¿ç¨ä¸ï¼å¦æå¯¼èªè§¦åäºè§å¾è¿æ¸¡ï¼åå®å è®¸ä½ ä»è¢«å¯¼èªå°çç®æ çææ¡£æä½ç¸å ³çè§å¾è¿æ¸¡ï¼æä¾å¯¹ç¸å ³ViewTransition对象ç访é®ï¼ã PageSwapEvent-
pageswapäºä»¶çäºä»¶å¯¹è±¡ãå¨è·¨ææ¡£å¯¼èªè¿ç¨ä¸ï¼å¦æå¯¼èªè§¦åäºè§å¾è¿æ¸¡ï¼å®å è®¸ä½ ä»æ£å¨å¯¼èªæ¥æºçææ¡£æçºµç¸å ³çè§å¾è¿æ¸¡ï¼æä¾å¯¹ç¸å ³ViewTransition对象ç访é®ï¼ãå®è¿æä¾å¯¹å¯¼èªç±»å以åå½ååç®æ ææ¡£å岿¡ç®ä¿¡æ¯ç访é®ã Windowpagerevealäºä»¶-
å½ææ¡£é¦æ¬¡æ¸²ææ¶è§¦åï¼æ 论æ¯ä»ç½ç»å è½½æ°ææ¡£è¿æ¯æ¿æ´»ææ¡£ï¼ä»åé/åè¿ç¼åï¼bfcacheï¼æ prerenderï¼ã
Windowpageswapäºä»¶-
å½ææ¡£å 导èªèå³å°å¸è½½æ¶è§¦åã
HTML æ©å±
<link rel="expect">-
ä¸ºç¨æ·ç页é¢åå§è§å¾æ è¯å ³èææ¡£ä¸æå ³é®çå 容ãå¨è§£æå ³é®å 容ä¹åï¼ææ¡£åç°å°è¢«é»ç¢ï¼ä»¥ç¡®ä¿å¨æææ¯æçæµè§å¨ä¸è¿è¡ä¸è´ç馿¬¡ç»å¶ï¼ä»èå®ç°è§å¾è¿æ¸¡ã
CSS æ©å±
>At è§å
@view-transition-
å¨è·¨ææ¡£å¯¼èªçæ åµä¸ï¼
@view-transitionç¨äºéæ©å½ååç®æ ææ¡£è¿è¡è§å¾è¿æ¸¡ã
屿§
view-transition-name-
为éå®çå ç´ æä¾åç¬çæ è¯åç§°ï¼å¹¶ä½¿å ¶åä¸ä¸æ ¹è§å¾è¿æ¸¡ä¸åçåç¬çè§å¾è¿æ¸¡ââæè 妿æå®äº
noneå¼ï¼åä¸åä¸è§å¾è¿æ¸¡ã
伪å ç´
::view-transition-
è§å¾è¿æ¸¡å å å±çæ ¹å ç´ ï¼å®å 嫿æè§å¾è¿æ¸¡ä¸ä½äºææå ¶ä»é¡µé¢å 容çé¡¶é¨ã
::view-transition-group()-
å个è§å¾è¿æ¸¡çæ ¹å ç´ ã
::view-transition-image-pair()-
è§å¾è¿æ¸¡çæ§è§å¾åæ°è§å¾ç容å¨ââè¿æ¸¡ååè¿æ¸¡åã
::view-transition-old()-
è¿æ¸¡åçæ§è§å¾çéæå¿«ç §ã
::view-transition-new()-
è¿æ¸¡åçæ°è§å¾ç宿¶è¡¨ç¤ºã
示ä¾
- åºç¡è§å¾è¿æ¸¡æ¼ç¤ºï¼ä¸ä¸ªåºæ¬ç带æè§å¾è¿æ¸¡çå¾ååºæ¼ç¤ºï¼æ°æ§å¾ååæ°æ§åå¹ä¹é´é½æåç¬çå¨ç»ã
- åºæ¬è§å¾è¿æ¸¡ MPA æ¼ç¤ºï¼ä¸ä¸ªä¸¤é¡µç示ä¾ç½ç«ï¼æ¼ç¤ºäºè·¨ææ¡£ï¼MPAï¼è§å¾è¿æ¸¡ç使ç¨ï¼å¨ä¸¤é¡µä¹é´å¯¼èªæ¶æä¾èªå®ä¹çâå䏿»å¨âè¿æ¸¡ã
- HTTP 203 ææ¾å表ï¼ä¸ä¸ªæ´å¤æçè§é¢ææ¾å¨æ¼ç¤ºåºç¨ç¨åºï¼å å«äºè®¸å¤ä¸åçè§å¾è¿æ¸¡ï¼å¨ä½¿ç¨è§å¾è¿æ¸¡ API å®ç°å¹³æ»è¿æ¸¡ä¸è§£éäºå ¶ä¸çå¾å¤è§å¾è¿æ¸¡ã
- Chrome DevRel å¢éæåå表ï¼ä¸ä¸ªåºæ¬çå¢éé
ç½®æä»¶é¡µé¢åºç¨ç¨åºï¼æ¼ç¤ºå¦ä½ä½¿ç¨
pagerevealåpageswapäºä»¶åºäºâæ¥æºâåâç®æ âURL èªå®ä¹è·¨ææ¡£è§å¾è¿æ¸¡çä¼ åºåä¼ å ¥å¨ç»ã
è§è
| è§è |
|---|
| CSS View Transitions Module Level 2 > |
| CSS View Transitions Module Level 1 > |
æµè§å¨å ¼å®¹æ§
>api.Document.startViewTransition
css.at-rules.view-transition
åè§
- developer.chrome.comï¼2024ï¼ä¸ç使ç¨è§å¾è¿æ¸¡ API å®ç°å¹³æ»è¿æ¸¡
- stackdiary.comï¼2023ï¼ä¸çè§å¾è¿æ¸¡ APIï¼å建平æ»çè§å¾è¿æ¸¡
- DebugBearï¼2024ï¼ä¸çè§å¾è¿æ¸¡ APIï¼æ éæ¡æ¶çå页åºç¨ç¨åº