日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

餓了么面試官:實現一下 Element-UI 官網的主題切換動畫!

來源: 責編: 時間:2024-07-15 17:15:39 616觀看
導讀前言大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心。最近看到 ElementPlus 官網上的切換主題方式非常有趣,這是一個過渡的動畫效果。圖片所以在網上查了一番,找到基本的實現

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心。Amq28資訊網——每日最新資訊28at.com

最近看到 ElementPlus 官網上的切換主題方式非常有趣,這是一個過渡的動畫效果。Amq28資訊網——每日最新資訊28at.com

圖片圖片Amq28資訊網——每日最新資訊28at.com

Amq28資訊網——每日最新資訊28at.com

所以在網上查了一番,找到基本的實現方法。Amq28資訊網——每日最新資訊28at.com

實現

基本效果

首先我們起一個 html 文件,寫一個按鈕,以及簡單的背景顏色切換,來模擬主題的切換。Amq28資訊網——每日最新資訊28at.com

圖片圖片Amq28資訊網——每日最新資訊28at.com

Amq28資訊網——每日最新資訊28at.com

可以看到實現了最簡單的主題切換效果。Amq28資訊網——每日最新資訊28at.com

圖片圖片Amq28資訊網——每日最新資訊28at.com

Amq28資訊網——每日最新資訊28at.com

document.startViewTransition

想要實現過渡效果,需要先用到一個 JavaScript 的原生方法:document.startViewTransition。Amq28資訊網——每日最新資訊28at.com

這個方法是用來做動畫過渡效果的。Amq28資訊網——每日最新資訊28at.com

圖片圖片Amq28資訊網——每日最新資訊28at.com

Amq28資訊網——每日最新資訊28at.com

通過調用 API,讓瀏覽器為新舊兩種不同視圖分別捕獲并建立了快照 (即 ::view-transition-old(root)舊快照 和 ::view-transition-new(root) 新快照),而后新舊兩快照在 ::view-transition-image-pair(root) 容器中完成轉場動畫的過渡。動畫結束后則刪除其相關偽元素 (快照和容器)。Amq28資訊網——每日最新資訊28at.com

圖片圖片Amq28資訊網——每日最新資訊28at.com

Amq28資訊網——每日最新資訊28at.com

過渡動畫效果

我們可以應用一下這個 API。Amq28資訊網——每日最新資訊28at.com

圖片圖片Amq28資訊網——每日最新資訊28at.com

Amq28資訊網——每日最新資訊28at.com

現在去切換主題顏色,發現有過渡效果了。Amq28資訊網——每日最新資訊28at.com

圖片圖片Amq28資訊網——每日最新資訊28at.com

Amq28資訊網——每日最新資訊28at.com

圓形擴散過渡動畫

接下來實現圓形過渡的效果,其實這個動畫最終是展示::view-transition-new(root)這個偽元素,所以我們只需要讓這個偽元素有原型擴散的過渡動畫即可!Amq28資訊網——每日最新資訊28at.com

那圓形擴散動畫咋做呢?其實很簡單,只需要將偽元素的半徑,從0 -> 100%即可。Amq28資訊網——每日最新資訊28at.com

圖片圖片Amq28資訊網——每日最新資訊28at.com

Amq28資訊網——每日最新資訊28at.com

代碼如下:Amq28資訊網——每日最新資訊28at.com

圖片圖片Amq28資訊網——每日最新資訊28at.com

Amq28資訊網——每日最新資訊28at.com

并且我們需要取消掉 document.startViewTransition默認的動畫效果,不然它會導致我們自定義的動畫效果無效。Amq28資訊網——每日最新資訊28at.com

圖片圖片Amq28資訊網——每日最新資訊28at.com

Amq28資訊網——每日最新資訊28at.com

最終得到圓形擴散的效果:Amq28資訊網——每日最新資訊28at.com

圖片Amq28資訊網——每日最新資訊28at.com

Amq28資訊網——每日最新資訊28at.com

完整代碼

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>Document</title>    <style>      :root {        /* 默認亮主題 */        --bg-color: #fff;        background-color: var(--bg-color);      }      :root.dark {        /* 暗主題 */        --bg-color: #000;      }      ::view-transition-new(root),      ::view-transition-old(root) {        /* 關閉默認動畫 */        animation: none;      }    </style>  </head>  <body>    <button id="themeButton">切換主題</button>    <script>      const themeButton = document.getElementById("themeButton");      themeButton.addEventListener("click", (e) => {        // 執行切換主題的操作        const transition = document.startViewTransition(() => {          // 動畫過渡切換主題色          document.documentElement.classList.toggle("dark");        });        // document.startViewTransition 的 ready 返回一個 Promise        transition.ready.then(() => {          // 獲取鼠標的坐標          const { clientX, clientY } = e;          // 計算最大半徑          const radius = Math.hypot(            Math.max(clientX, innerWidth - clientX),            Math.max(clientY, innerHeight - clientY)          );          // 圓形動畫擴散開始          document.documentElement.animate(            {              clipPath: [                `circle(0% at ${clientX}px ${clientY}px)`,                `circle(${radius}px at ${clientX}px ${clientY}px)`,              ],            },            // 設置時間,已經目標偽元素            {              duration: 300,              pseudoElement: "::view-transition-new(root)",            }          );        });      });    </script>  </body></html>

本文鏈接:http://www.www897cc.com/showinfo-26-100986-0.html餓了么面試官:實現一下 Element-UI 官網的主題切換動畫!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: VueConf 2024 落幕,7大模塊講解 Vue 未來生態變化!

下一篇: 想看源碼但是無從下口怎么辦?

標簽:
  • 熱門焦點
  • 8月總票房已突破10億!《封神》第一:口碑已經成了

    8月5日消息,據燈塔專業版數據,截至8月5日9時35分,8月總票房(含預售)已突破10億。其中,《封神》以大比分的優勢領先。根據官方消息,目前該片總票房已經超過14.
  • 一加首款折疊屏!一加Open渲染圖出爐:罕見單手可握小尺寸

    8月5日消息,此前就有爆料稱,一加首款折疊屏手機將會在第三季度上市,如今隨著時間臨近,新機的各種消息也開始浮出水面。據悉,這款新機將會被命名為&ldquo;On
  • Golang 中的 io 包詳解:組合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是對Reader和Writer接口的組合,
  • 得物效率前端微應用推進過程與思考

    一、背景效率工程隨著業務的發展,組織規模的擴大,越來越多的企業開始意識到協作效率對于企業團隊的重要性,甚至是決定其在某個行業競爭中突圍的關鍵,是企業長久生存的根本。得物
  • 如何通過Python線程池實現異步編程?

    線程池的概念和基本原理線程池是一種并發處理機制,它可以在程序啟動時創建一組線程,并將它們置于等待任務的狀態。當任務到達時,線程池中的某個線程會被喚醒并執行任務,執行完任
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己&ldquo;當家&rdquo;的盒馬,開始加速謀生了。據盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經與
  • 小米MIX Fold 3下月亮相:今年唯一無短板的全能折疊屏

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都有新的進展,其中榮耀、三星都已陸續發布了最新的折疊屏旗艦,尤其號榮耀Magi
  • 消息稱小米汽車開始篩選交付中心:需至少120個車位

    IT之家 7 月 7 日消息,日前,有微博簡介為“汽車行業從業者、長三角一體化擁護者”的微博用戶 @長三角行健者 發文表示,據經銷商集團反饋,小米汽車目前
  • 北京:科技教育體驗基地開始登記

      北京“科技館之城”科技教育體驗基地登記和認證工作日前啟動。首批北京科技教育體驗基地擬于2023年全國科普日期間掛牌,后續還將開展常態化登記。  北京科技教育體驗基
Top 主站蜘蛛池模板: 阿克| 西乡县| 伊春市| 通渭县| 大同县| 从化市| 睢宁县| 莆田市| 绩溪县| 河西区| 本溪| 富宁县| 婺源县| 蒙阴县| 柏乡县| 绥宁县| 酒泉市| 彭山县| 勃利县| 定远县| 西昌市| 望谟县| 二手房| 育儿| 河津市| 乡宁县| 正定县| 托克托县| 闵行区| 芜湖市| 崇礼县| 乡宁县| 渝北区| 三台县| 遵化市| 米易县| 瓦房店市| 惠来县| 莱西市| 乌恰县| 宁国市|