透過 CSS 製作書本翻頁效果
近期想透過「翻頁」這個互動方式來做一個 web 小遊戲,過程中發現意外地不好實現。 這篇文章需要讀者對 React 這個前端框架及 CSS 的 transition 屬性的應用有基本的了解,成果及原始碼是建立於這兩個技術之上的,內文會大略地對實踐的方式說明,但不會詳細地提及所使用的框架及函式庫確切 API 的功能及用法。 TL;DR Repo | Live demo 透過 CSS 的 translateZ 做出書頁的正反面 .back { transform: translateZ(-1px); } 2023/9/22 基於前端社群網友的建議,我把原先用 opacity 變換做出的頁面正反面,換成靜態、單純加在 CSS class– back 中的 translateZ,另外,為了讓它能正確作用,也需要在 page 這個 CSS class 中加入 transform-style: preserve-3d,如此一來,應該多少能減輕瀏覽器的運算負擔。 透過 position: relative/absolute 來堆疊書頁的上下一頁 用 z-index 切換堆疊的順序 react-spring 控制 rotateY 做翻頁轉場 配合 perspective 屬性改變視角增添立體感 use-gesture 加入拖曳翻頁功能 讓套件再次偉大 首先我想到的是有沒有現成的(免費)翻頁書效果套件可以用, turn.js– 建立在 jQuery 之上的套件,快十年沒更新了,考量後續擴充功能可能有困難,暫不考慮。 StPageFlip– 效果很擬真,從 demo 看起來使用體驗流暢;而且有 React 版本,但是,從 commits 看來有兩年沒更新了,以 front-end 的迭代速度加上,擔心搭 React 18 會不會出現不明的坑因此沒有使用。 後續又看了幾個套件(比較新的)好像也是搭在這些套件上實踐出來,覺得難以在短期理解其運作方式,怕未來不好改。...