React實現(xiàn)翻頁時鐘的代碼示例
1. 布局、樣式、翻頁動畫
翻頁時鐘把數(shù)字分為上下兩部分,翻頁效果的實現(xiàn)需要通過設(shè)置 position 把所有的數(shù)組放在同一個位置疊加起來。
翻頁時鐘的動畫是當前顯示時間的 up 部分向下翻轉(zhuǎn)至于屏幕垂直的位置,在這個位置需要顯示的下一個時間的 down 部分向下翻轉(zhuǎn),這樣就實現(xiàn)了翻頁時鐘的完整動畫。
HTML 結(jié)構(gòu)如下所示:
<div class="container"> <ul class="flip"> <li> <div class="up"> <div class="content">0</div> </div> <div class="down"> <div class="content">0</div> </div> </li> <li> <div class="up"> <div class="content">1</div> </div> <div class="down"> <div class="content">1</div> </div> </li> </ul> </div>
CSS 樣式
.container { height: 90px; } .container .flip { position: relative; float: left; width: 60px; height: 100%; margin: 0 5px; } .flip li { position: absolute; left: 0; top: 0; width: 100%; height: 100%; font-size: 80px; text-align: center; line-height: 90px; font-weight: bold; border-radius: 6px; perspective: 200px; transform-style: preserve-3d; } .flip li:first-child { z-index: 2; } // 設(shè)置class為up和down的高度為父元素容器的一半高度 .flip li > div { position: absolute; left: 0; height: 50%; width: 100%; overflow: hidden; } .flip .up { /* 改變選中軸的位置 使翻轉(zhuǎn)軸位于up、down部分的中間*/ transform-origin: 0 100%; top: 0; border-radius: 4px; } .flip .down { /* 改變選中軸的位置 使翻轉(zhuǎn)軸位于up、down部分的中間 */ transform-origin: 0 0; bottom: 0; border-radius: 4px; } .flip .content { position: absolute; width: 100%; border-radius: 6px; color: #ccc; background-color: #333; text-shadow: 0 1px 2px #000; } .flip .up .content { top: 0; } .flip .down .content { bottom: 0; } // 設(shè)置翻頁折痕 .flip .up::after { content: ""; position: absolute; top: 43px; left: 0; width: 100%; height: 4px; background-color: rgba(0, 0, 0, 0.4); }
實現(xiàn)的3D效果如下:
2. 使用 JS 使動畫持續(xù)翻頁
完整的翻頁時鐘為 00:00:00,需要翻頁的有 6 個部分,可以先把翻頁部分提取出單獨的組件。
1、準備數(shù)據(jù)
因為需要時分秒各個翻頁部分顯示的數(shù)字范圍不同,所以這里先把數(shù)據(jù)準備好。
2、封裝翻頁組件
組件接收兩個參數(shù):1、當前翻頁類型(時、分、秒); 2、當前類型時間。
index 與當前類型時間相同時,當前元素的 class 為 active,上一個元素的 class 為 before;如果當前元素為第一個元素,最后一個元素的class為before。
3、各個翻頁組件間的聯(lián)動
這里還需要定義一個對象,用于翻頁組件間的聯(lián)動關(guān)系的對應(yīng)。
秒鐘的個位轉(zhuǎn)完一周后,秒鐘的十位需要進行一次翻頁,以此類推,直到時鐘的十位進行翻轉(zhuǎn)。實現(xiàn)方式如下:
源碼地址
https://stackblitz.com/edit/vitejs-vite-ehlf3y?file=src%2FTimeCard.tsx
到此這篇關(guān)于React實現(xiàn)翻頁時鐘的代碼示例的文章就介紹到這了,更多相關(guān)React翻頁時鐘內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳細談?wù)凴eact中setState是一個宏任務(wù)還是微任務(wù)
學(xué)過react的人都知道,setState在react里是一個很重要的方法,使用它可以更新我們數(shù)據(jù)的狀態(tài),下面這篇文章主要給大家介紹了關(guān)于React中setState是一個宏任務(wù)還是微任務(wù)的相關(guān)資料,需要的朋友可以參考下2021-09-09詳解如何使用React和MUI創(chuàng)建多選Checkbox樹組件
這篇文章主要為大家詳細介紹了如何使用 React 和 MUI(Material-UI)庫來創(chuàng)建一個多選 Checkbox 樹組件,該組件可以用于展示樹形結(jié)構(gòu)的數(shù)據(jù),并允許用戶選擇多個節(jié)點,感興趣的可以了解下2024-01-01一起來學(xué)習(xí)React元素的創(chuàng)建和渲染
這篇文章主要為大家詳細介紹了React元素的創(chuàng)建和渲染,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03React中使用Axios發(fā)起POST請求提交文件方式
這篇文章主要介紹了React中使用Axios發(fā)起POST請求提交文件方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02解析React中useMemo與useCallback的區(qū)別
這篇文章主要介紹了React中useMemo與useCallback的區(qū)別,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08ReactNative中使用Redux架構(gòu)總結(jié)
本篇文章主要介紹了ReactNative中使用Redux架構(gòu)總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12