直播系統中網頁類似app頁面切換動畫的實現方式
documentTransition
瀏覽器開啟該功能API
chrome://flags/#document-transition
'documentTransition' in document
如何理解該API
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>rootTransition示例</title> </head> <style> .list { height: 100vh; } .details { height: 100vh; background-color: aquamarine; } .hide { display: none; } </style> <body> <div class="list"> 列表頁 <button id="btn">點選去詳情頁</button> </div> <div class="details hide">詳情頁</div> <script> const btn = document.querySelector('#btn') const details = document.querySelector('.details') const list = document.querySelector('.list') btn.addEventListener('click', () => { navigateToDetailsPage() }) async function navigateToDetailsPage() { await document.documentTransition.prepare({ rootTransition: "cover-left", }); details.classList.remove('hide') list.classList.add('hide') document.documentTransition.start(); } </script> </body></html>
// 使用者點選按鈕切換頁面時執行async function navigateToSettingsPage() { // 捕捉當前頁面狀態,進行動畫準備 await document.documentTransition.prepare({ rootTransition: 'cover-left', // “頁面”切換效果 }); // 執行更新DOM操作,顯示下一頁的內容 updateDOMForNextPage(); // 呼叫start開始執行動畫 await document.documentTransition.start(); // 動畫結束}
async function navigateToSettingsPage() { await document.documentTransition.prepare({ rootTransition: 'cover-up', sharedElements: [element1, element2, element3], }); // updateDOM await document.documentTransition.start({ sharedElements: [element1, element4, element5], });}
完整程式碼:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>rootTransition示例</title></head><style>body{margin:0}.flex-center{display:flex;align-items:center;justify-content:center}.list{height:100vh}.details{height:100vh}.hide{display:none!important}.card{display:flex;align-items:center;margin:0 20px;box-shadow:0 0 50px #ccc;border-radius:12px;overflow:hidden}.card .desc{font-size:18px;color:#333;font-weight:bold;margin-left:20px}.details-desc{font-size:22px;color:limegreen}.list{display:flex;flex-direction:column;justify-content:center}.button-wrap{margin-top:20px;text-align:center}.back-btn{display:inline-block;width:100px;height:40px}.details-cover{display:block;width:100%}.details-desc{position:absolute;right:20px;top:20px}.cover,.details-cover,.desc,.details-desc{contain:paint}</style><body> <div class="list"> <div class="card"> <img class="cover" src="http://p1-q.mafengwo.net/s18/M00/52/27/CoUBYGDMNO-AOlK4AAVHKFDW8_Y808.jpg?imageMogr2%2Fthumbnail%2F%21220x150r%2Fstrip%2Fgravity%2FCenter%2Fcrop%2F%21220x150%2Fquality%2F90" /> <span class="desc">人生海海</span> </div> <div class="button-wrap"> <button id="btn">點選去詳情頁</button> </div> </div> <div class="details hide"> <div> <div style="position: relative;"> <img class="details-cover" src="http://p1-q.mafengwo.net/s18/M00/52/27/CoUBYGDMNO-AOlK4AAVHKFDW8_Y808.jpg?imageMogr2%2Fthumbnail%2F%21220x150r%2Fstrip%2Fgravity%2FCenter%2Fcrop%2F%21220x150%2Fquality%2F90" /> <div class="details-desc">人生海海</div> </div> <div class="button-wrap"> <button class="back-btn">返回</button> </div> </div> </div> <script> const btn = document.querySelector('#btn') const details = document.querySelector('.details') const list = document.querySelector('.list') const backBtn = document.querySelector('.back-btn') const cover = document.querySelector('.cover') const desc = document.querySelector('.desc') const detailsCover = document.querySelector('.details-cover') const detailsDesc = document.querySelector('.details-desc') btn.addEventListener('click', () => { navigateToDetailsPage() }, false) backBtn.addEventListener('click', () => { showList() }, false) async function navigateToDetailsPage() { await document.documentTransition.prepare({ rootTransition: "cover-up", sharedElements: [ cover, desc ] }); details.classList.remove('hide') list.classList.add('hide') document.documentTransition.start({ sharedElements: [ detailsCover, detailsDesc ] }); } async function showList() { await document.documentTransition.prepare({ rootTransition: "implode", sharedElements: [ detailsCover, detailsDesc ] }); details.classList.add("hide"); list.classList.remove("hide"); await document.documentTransition.start({ sharedElements: [ cover, desc ] }); } </script></body></html>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2795231/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- iOS實現超酷頁面切換動畫特效iOS動畫特效
- WPF手動實現切換頁面
- 頁面無重新整理切換實現
- 實現類似IE的列印網頁功能 (轉)網頁
- CSS實現頁面切換時的滑動效果CSS
- 手機直播原始碼,使用ViewPager2實現頁面滑動切換原始碼Viewpager
- Android 頁面跳轉動畫的兩種實現方式Android動畫
- app直播原始碼,平臺登入頁面實現和修改密碼頁面實現APP原始碼密碼
- 直播系統app原始碼,Android studio 實現app登入註冊頁面APP原始碼Android
- 實現頁面載入的變換和位移動畫效果動畫
- app直播原始碼,自定義兩種Activity切換動畫實現APP原始碼動畫
- QT實現類似於網頁step 選單效果QT網頁
- mui 子頁面切換父頁面底部導航UI
- Unix檔案系統頁面監控實現-效果頁面
- 如何在 web 頁面中實現類似 excel 固定表頭 / 標題行的效果?WebExcel
- 直播系統app原始碼,簡潔好看的登入頁面APP原始碼
- Blazor如何實現類似於微信的Tab切換?Blazor
- Flutter 實現類似美團外賣店鋪頁面滑動效果Flutter
- vue路由切換滑動效果 vue頁面跳轉互動 vue實現動畫跳轉Vue路由動畫
- 直播賣貨小程式原始碼中,商品分類頁面是如何實現的原始碼
- 點選按鈕實現切換頁面背景顏色效果
- 直播app原始碼,系統首頁或任意頁面下拉自動重新整理APP原始碼
- 類似抖音直播間滑動載入頁
- 在MVC中實現 網頁錯誤跳轉到500統一頁面MVC網頁
- 討論一下基於網頁聊天的實現(類似gmail中的聊天)網頁AI
- 用CSS實現Tab頁切換效果CSS
- 直播商城原始碼,實現左右聯動商品分類頁面原始碼
- Vue 全家桶仿原生App切換效果和頁面快取實踐VueAPP快取
- SVG 動畫實現彈性的頁面元素效果SVG動畫
- 影片直播系統原始碼,uniapp 中設定全域性頁面背景色原始碼APP
- 直播平臺搭建,切換頁面 捲軸預設最頂端
- jquery實現的點選頁面動畫方式平滑定位到某元素程式碼jQuery動畫
- 太讚了!超炫的頁面切換動畫效果【附原始碼下載】動畫原始碼
- 提升現代web app中的頁面效能WebAPP
- flutter實戰6:TAB頁面切換免重繪Flutter
- 利用Register protocol實現網頁呼叫桌面程式(類似迅雷、QQ等)Protocol網頁
- 利用ViewPager和Fragment實現頁卡切換ViewpagerFragment
- 網頁柵格系統:蛋糕的切法網頁