首頁 web前端 css教學 Animate SVG路徑在CSS中的變化

Animate SVG路徑在CSS中的變化

Apr 11, 2025 am 09:12 AM

Animate SVG Path Changes in CSS

SVG的<path></path>元素提供了強大的繪圖功能,我偶爾會嘗試用它來繪製一些形狀。雖然我對它的全部功能只了解皮毛,但也足夠讓我嘗試一些有趣的動畫效果。所有直線語法命令(如L )都非常簡單易懂,而曲線命令Q也相當直觀。將繪圖限制在viewBox="0 0 100 100"內,繪製簡單的圖形似乎並不難。

以下是一個經典示例,它使用所有基本命令繪製圖形,並使用CSS進行動畫處理(僅限Chromium瀏覽器):

看似奇怪但卻真實:

<svg viewbox="0 0 10 10"><path d="M2,2 L8,8"></path></svg>
登入後複製
 svg:hover path {
  transition: 0.2s;
  d: path("M8,2 L2,8");
}
登入後複製

最近,我需要一個UI元素,其圖標會根據狀態的不同而變化。它有點像“日誌”形狀,默認狀態是直線,有點像漢堡菜單(只有四條線,更像是文本行),然後是其他各種狀態。

  1. 默認(DEFAULT)
  2. 活動(ACTIVE)
  3. 成功(SUCCESS)
  4. 錯誤(ERROR)

首先,我編寫了一個非常複雜的有限狀態機:

 const indicator = document.querySelector(".element");

let currentState = indicator.dataset.state;

indicator.addEventListener("click", () => {
  let nextState = "";

  if (currentState == "DEFAULT") {
    nextState = "ACTIVE";
  } else if (currentState == "ACTIVE") {
    nextState = "SUCCESS";
  } else if (currentState == "SUCCESS") {
    nextState = "ERROR";
  } else {
    nextState = "DEFAULT";
  }

  indicator.dataset.state = nextState;
  currentState = nextState;
});
登入後複製

這為使用data屬性設置樣式打開了大門:

 .element {
  &[data-state="DEFAULT"] {
  }
  &[data-state="ACTIVE"] {
  }
  &[data-state="SUCCESS"] {
  }
  &[data-state="ERROR"] {
  }
}
登入後複製

所以,如果我的元素以四條線的默認狀態開始:

<div data-state="DEFAULT">
  <svg viewbox="0 0 100 100"><path d="M0, 20 Q50, 20 100, 20"></path><path d="M0, 40 Q50, 40 100, 40"></path><path d="M0, 60 Q50, 60 100, 60"></path><path d="M0, 80 Q50, 80 100, 80"></path></svg>
</div>
登入後複製

……我可以在CSS中更改其他狀態的路徑。例如,我可以使用CSS更改這四條直線。

請注意,這四條“直線”方便地包含了未使用的曲線點。只有具有相同數量和類型點的路徑才能在CSS中進行動畫處理。添加曲線點打開了更多可能性。

這四個新的路徑實際上繪製的是類似圓形的形狀!

 .editor-indicator {
  &[data-state="ACTIVE"] {
    .icon {
      :nth-child(1) {
        d: path("M50, 0 Q95, 5 100,50");
      }
      :nth-child(2) {
        d: path("M100, 50 Q95, 95 50,100");
      }
      :nth-child(3) {
        d: path("M50,100 Q5, 95 0, 50");
      }
      :nth-child(4) {
        d: path("M0, 50 Q5, 5 50, 0");
      }
    }
  }
}
登入後複製

對於其他狀態,我繪製了一個粗略的勾號(表示成功)和一個粗略的感嘆號(表示失敗)。

演示(僅限Chromium瀏覽器),您可以點擊它來更改狀態:(此處應插入演示鏈接或代碼,但由於我無法創建動態內容,只能描述)

由於Firefox和Safari不支持CSS中的d: path() ,所以我最終沒有使用它。它並非不能進行動畫處理,而是根本無法工作,因此對我來說不可用。我最終只是在不同的狀態下替換了圖標。

如果您需要跨瀏覽器的形狀變形,我們有一篇關於這方面的完整文章。 (此處應插入文章鏈接,但由於我無法提供鏈接,只能描述)

以上是Animate SVG路徑在CSS中的變化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1324
25
PHP教程
1272
29
C# 教程
1251
24
靜態表單提供商的比較 靜態表單提供商的比較 Apr 16, 2025 am 11:20 AM

讓我們嘗試在這裡造成一個術語:“靜態表單提供商”。你帶上html

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

每周平台新聞:HTML加載屬性,主要的ARIA規格以及從iframe轉移到Shadow dom 每周平台新聞:HTML加載屬性,主要的ARIA規格以及從iframe轉移到Shadow dom Apr 17, 2025 am 10:55 AM

在本週的平台新聞綜述中,Chrome引入了一個用於加載的新屬性,Web開發人員的可訪問性規範以及BBC Move

與部分元素的交易 與部分元素的交易 Apr 12, 2025 am 11:39 AM

同一天發表了兩篇文章:

帶有HTML對話框元素的一些動手 帶有HTML對話框元素的一些動手 Apr 16, 2025 am 11:33 AM

這是我第一次查看HTML元素。我已經意識到了一段時間,但是尚未將其旋轉。它很酷,

我們如何標記Google字體並創建Goofonts.com 我們如何標記Google字體並創建Goofonts.com Apr 12, 2025 pm 12:02 PM

Goofonts是由開發人員和設計師丈夫簽名的附帶項目,它們都是版式的忠實擁護者。我們一直在標記Google

多腳步滑塊:一般案例 多腳步滑塊:一般案例 Apr 12, 2025 am 10:52 AM

這個兩部分系列的第一部分詳細介紹了我們如何獲得兩次跑步的滑塊。現在,我們&#039;

'訂閱播客”鏈接應在哪裡? '訂閱播客”鏈接應在哪裡? Apr 16, 2025 pm 12:04 PM

有一段時間,iTunes是播客中的大狗,因此,如果您將“訂閱播客”鏈接到喜歡:

See all articles