Vue知識點(5)-- 動畫

CSS 動畫是 Vue3 中實現組件動畫效果的高效方式,主要通過 CSS transitionskeyframes 動畫

CSS Keyframes(關鍵幀動畫)

用來創建復雜的動畫序列,可以精確控制動畫的各個階段。

核心語法:

@keyframes animationName {0% { /* 起始狀態 */ }50% { /* 中間狀態 */ }100% { /* 結束狀態 */ }
}.cssClass{animation: name            // 動畫名稱 (對應 @keyframes 名稱)(必需)duration        // 動畫持續時間(必需)timing-function // 動畫速度曲線delay           // 動畫延遲時間iteration-count // 動畫播放次數direction       // 動畫播放方向fill-mode       // 動畫前后如何應用樣式play-state;     // 動畫運行狀態
}

每一個參數都可以單獨的修改和使用

  1. animation-name (必需)
    指定要應用的 @keyframes 動畫名稱
@keyframes example {from { opacity: 0; }to { opacity: 1; }
}.element {animation-name: example;
}
  1. animation-duration (必需)
    定義動畫完成一個周期所需時間
.element {animation-duration: 2s; /* 可以是秒(s)或毫秒(ms) */
}
  1. animation-timing-function
    定義動畫的速度曲線
    描述
    ease默認值,慢快慢
    linear勻速
    ease-in慢開始
    ease-out慢結束
    ease-in-out慢開始和結束
    cubic-bezier(n,n,n,n)自定義貝塞爾曲線
    steps(n)分步動畫
.element {animation-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1);
}
  1. animation-delay
    定義動畫開始前的延遲時間
.element {animation-delay: 1s; /* 1秒后開始動畫 */
}
  1. animation-iteration-count
    定義動畫播放次數
    描述
    number具體次數 (如 2, 3.5)
    infinite無限循環
.element {animation-iteration-count: infinite;
}
  1. animation-direction
    定義動畫播放方向
    描述
    normal默認,正向播放
    reverse反向播放
    alternate先正向后反向交替
    alternate-reverse先反向后正向交替
.element {animation-direction: alternate;
}
  1. animation-fill-mode
    定義動畫執行前后如何應用樣式
    描述
    none默認,不應用任何樣式
    forwards保持最后一幀樣式
    backwards應用第一幀樣式
    both同時應用 forwards 和 backwards
.element {animation-fill-mode: forwards;
}
  1. animation-play-state
    控制動畫的播放狀態
    描述
    running默認,動畫運行
    paused動畫暫停
.element:hover {animation-play-state: paused;
}

案例實踐:

//基于CSS class的動畫
<template><div :class="{ shake: disabled }"><button @click="warnDisabled">Click me</button><span v-if="disabled">This feature is disabled!</span></div>
</template><script setup>
import { ref } from 'vue'
const disabled = ref(false)
const warnDisabled = () => {disabled.value = truesetTimeout(() => {disabled.value = false}, 1500)
}
</script><style scoped>
.shake {animation: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;transform: translate3d(0, 0, 0);
}
@keyframes shake {10%,90% {transform: translate3d(-1px, 0, 0);}20%,80% {transform: translate3d(2px, 0, 0);}30%,50%,70% {transform: translate3d(-4px, 0, 0);}40%,60% {transform: translate3d(4px, 0, 0);}
}
</style>

CSS Transitions(過渡動畫)

用于在元素從一種狀態轉變為另一種狀態時添加平滑的過渡效果。

核心語法:

.cssClass{transition: [property]       // 要過渡的CSS屬性[duration]       // 過渡持續時間(必需)[timing-function] // 過渡速度曲線[delay];         // 過渡延遲時間
}
  1. transition-property(可選)
    指定應用過渡效果的 CSS 屬性名稱

常見可過渡屬性:
color, background-color
opacity
transform (包括 translate, scale, rotate 等)
width, height
margin, padding
border 相關屬性

.element {transition-property: opacity, transform;/* 或者 */transition-property: all; /* 所有可過渡屬性 */
}
  1. transition-duration(必需)
    定義過渡效果持續時間
.element {transition-duration: 0.3s; /* 可以是秒(s)或毫秒(ms) */
}
  1. transition-timing-function
    定義過渡效果的速度曲線
    描述
    ease默認值,慢快慢
    linear勻速
    ease-in慢開始
    ease-out慢結束
    ease-in-out慢開始和結束
    cubic-bezier(n,n,n,n)自定義貝塞爾曲線
    steps(n)分步過渡
.element {transition-timing-function: cubic-bezier(0.68, -0.55, 0.27, 1.55);
}
  1. transition-delay(可選)
    定義過渡效果開始前的延遲時間
.element {transition-delay: 0.2s; /* 0.2秒后開始過渡 */
}

案例實踐:

//狀態驅動的動畫
<template><div@mousemove="onMousemove":style="{ backgroundColor: `hsl(${x}, 80%, 50%)` }"class="movearea"><p>Move your mouse across this div...</p><p>x: {{ x }}</p></div>
</template><script setup>
import { ref } from 'vue'
const x = ref(0)
const onMousemove = (e) => {x.value = e.clientX
}
</script><style scoped>
.movearea {transition: 0.3s background-color ease;
}
</style>

transform

transform 是 CSS 中用于對元素進行 2D 或 3D 變換的強大屬性,它可以改變元素的形狀、位置和方向而不影響文檔流。

可以組合多個變換函數,空格分隔,從右向左依次執行

transform: rotate(45deg) scale(1.2) translateX(50px);
/* 先平移 → 然后縮放 → 最后旋轉 */

2D

  1. 位移(Translate)
transform: translateX(50px);     /* 水平移動 */
transform: translateY(-20px);    /* 垂直移動 */
transform: translate(50px, 20px); /* 同時XY移動 */
  1. 旋轉(Rotate)
transform: rotate(45deg);       /* 順時針旋轉45度 */
transform: rotate(-90deg);      /* 逆時針旋轉90度 */
  1. 縮放(Scale)
transform: scale(1.5);          /* 均勻放大1.5倍 */
transform: scaleX(0.5);         /* 水平縮小一半 */
transform: scaleY(1.2);         /* 垂直放大1.2倍 */
transform: scale(1.2, 0.8);     /* 水平放大,垂直縮小 */
  1. 傾斜(Skew)
transform: skewX(15deg);        /* 水平傾斜 */
transform: skewY(-10deg);       /* 垂直傾斜 */
transform: skew(15deg, -10deg); /* 同時XY傾斜 */

3D

  1. 3D位移
transform: translateZ(100px);     /* Z軸移動 */
transform: translate3d(50px, 20px, 100px); /* XYZ移動 */
  1. 3D旋轉
transform: rotateX(45deg);       /* 繞X軸旋轉 */
transform: rotateY(30deg);       /* 繞Y軸旋轉 */
transform: rotateZ(15deg);       /* 繞Z軸旋轉 */
transform: rotate3d(1, 1, 0, 45deg); /* 自定義軸旋轉 */
  1. 3D縮放
transform: scaleZ(1.5);         /* Z軸縮放 */
transform: scale3d(1.2, 1.2, 1.5); /* XYZ縮放 */
  1. 透視(Perspective)
transform: perspective(500px) rotateY(45deg);

指定觀察者與 z=0 平面的距離
值越小,透視效果越強(類似廣角鏡頭)
值越大,透視效果越弱(類似長焦鏡頭)
必須為正數

相關屬性

  1. transform-origin
    設置變換的基準點(默認是元素中心)
transform-origin: 50% 50%;     /* 默認值 */
transform-origin: left top;    /* 左上角 */
transform-origin: 20px 30px;   /* 具體坐標 */
transform-origin: bottom right 50px; /* 3D變換時Z軸 */
  1. transform-style
    指定子元素是否保留3D位置
transform-style: flat;         /* 默認,子元素不保留3D位置 */
transform-style: preserve-3d;  /* 子元素保留3D位置 */
  1. perspective
    設置3D變換的視距
perspective: 1000px;          /* 在父元素上設置 */
  1. backface-visibility
    定義元素背面是否可見
backface-visibility: visible;  /* 默認,背面可見 */
backface-visibility: hidden;   /* 背面不可見 */

案例實踐:

//3d翻轉卡片
<template><div class="flip-container"><div class="flipper"><div class="front">正面</div><div class="back">背面</div></div></div>
</template><style scoped>
.flip-container {perspective: 100px;background: #644a68;
}
.flipper {transition: transform 3s;transform-style: preserve-3d;font-size: 30px;
}
.flip-container:hover .flipper {transform: rotateY(180deg);
}
.front,
.back {backface-visibility: hidden;
}
.back {transform: rotateY(180deg);
}
</style>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75071.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75071.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75071.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小型園區網實驗

劃分VLAN SW3 [sw3]vlan batch 2 3 20 30 [sw3]interface GigabitEthernet 0/0/1 [sw3-GigabitEthernet0/0/1]port link-type access [sw3-GigabitEthernet0/0/1]port default vlan 2 [sw3-GigabitEthernet0/0/1]int g0/0/2 [sw3-GigabitEthernet0/0/2]port link-type acces…

使用LangChain Agents構建Gradio及Gradio Tools(6)——創建自己的GradioTool

使用LangChain Agents構建Gradio及Gradio Tools(6)——創建自己的GradioTool 本篇摘要16. 使用LangChain Agents構建Gradio及Gradio Tool16.6 創建自己的GradioTool16.6.1 創建步驟16.6.2 創建示例StableDiffusionTool參考文獻本章目錄如下: 《使用LangChain Agents構建Grad…

SDL顯示YUV視頻

文章目錄 1. **宏定義和初始化**2. **全局變量**3. **refresh_video_timer 函數**4. **WinMain 函數**主要功能及工作流程&#xff1a;總結&#xff1a; 1. 宏定義和初始化 #define REFRESH_EVENT (SDL_USEREVENT 1) // 請求畫面刷新事件 #define QUIT_EVENT (SDL…

AnimateCC基礎教學:隨機抽取花名冊,不能重復

一.核心代碼: this.btnStartObj.addEventListener("click", switchBtn); this.btnOkObj.addEventListener("click", oKBtn); createjs.Ticker.addEventListener("tick", updateRandom); var _this this; var nameArr ["張三", &quo…

軟考 系統架構設計師系列知識點 —— 設計模式之抽象工廠模式

本文內容參考&#xff1a; 軟考 系統架構設計師系列知識點之設計模式&#xff08;2&#xff09;_系統架構設計師中考設計模式嗎-CSDN博客 https://baike.baidu.com/item/%E6%8A%BD%E8%B1%A1%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F/2361182 特此致謝&#xff01; Abstract Fac…

P2040 打開所有的燈

題目背景 pmshz在玩一個益(ruo)智(zhi)的小游戲&#xff0c;目的是打開九盞燈所有的燈&#xff0c;這樣的游戲難倒了pmshz。。。 題目描述 這個燈很奇(fan)怪(ren)&#xff0c;點一下就會將這個燈和其周圍四盞燈的開關狀態全部改變。現在你的任務就是就是告訴pmshz要全部打開…

漢得企業級 PaaS 平臺 H-ZERO 1.12.0 發布!四大維度升級,構建企業數字化新底座

漢得企業級 PaaS 平臺&#xff08;以下簡稱"H-ZERO"&#xff09;是一款基于微服務架構的企業級數字化 PaaS 平臺&#xff0c;可支持企業各類系統搭建、產品研發&#xff0c;幫助企業快速構架技術中臺。 H-ZERO于2025年3月底正式發布 V1.12.0 &#xff0c;此次發布聚…

ReplicaSet、Deployment功能是怎么實現的?

在Kubernetes中&#xff0c;ReplicaSet 和 Deployment 是用于管理 Pod 副本的關鍵對象。它們各自的功能和實現機制如下&#xff1a; 1. ReplicaSet 功能 管理 Pod 副本&#xff1a;確保指定數量的 Pod 副本一直在運行。如果有 Pod 副本崩潰或被刪除&#xff0c;ReplicaSet 會…

物聯網外設管理服務平臺

1 開發目標 1.1 架構圖 操作系統&#xff1a;基于Linux5.10.10源碼和STM32MP157開發板&#xff0c;完成tf-a(FSBL)、u-boot(SSBL)、uImage、dtbs的裁剪&#xff1b; 驅動層&#xff1a;為每個外設配置DTS并且單獨封裝外設驅動模塊。其中電壓ADC測試&#xff0c;采用linux內核…

PyTorch教程:如何讀寫張量與模型參數

本文演示了PyTorch中張量&#xff08;Tensor&#xff09;和模型參數的保存與加載方法&#xff0c;并提供完整的代碼示例及輸出結果&#xff0c;幫助讀者快速掌握數據持久化的核心操作。 1. 保存和加載單個張量 通過torch.save和torch.load可以直接保存和讀取張量。 import to…

持續集成:GitLab CI/CD 與 Jenkins CI/CD 的全面剖析

一、引言 在當今快速迭代的軟件開發領域,持續集成(Continuous Integration,CI)已成為保障軟件質量、加速開發流程的關鍵實踐。通過頻繁地將代碼集成到共享倉庫,并自動進行構建和測試,持續集成能夠盡早發現并解決代碼沖突和缺陷。而 GitLab CI/CD 和 Jenkins CI/CD 作為兩…

Python 序列構成的數組(序列的增量賦值)

序列的增量賦值 增量賦值運算符 和 * 的表現取決于它們的第一個操作對象。簡單起 見&#xff0c;我們把討論集中在增量加法&#xff08;&#xff09;上&#xff0c;但是這些概念對 * 和其他 增量運算符來說都是一樣的。 背后的特殊方法是 iadd &#xff08;用于“就地加法”&…

GEO, TCGA 等將被禁用?!這40個公開數據庫可能要小心使用了

GEO, TCGA 等將被禁用&#xff1f;&#xff01;這40個公開數據庫可能要小心使用了 最近NIH公共數據庫開始對中國禁用的消息鬧得風風火火&#xff1a; 你認為研究者上傳到 GEO 數據庫上的數據會被禁用嗎&#xff1f; 單選 會&#xff0c;畢竟占用存儲資源 不會&#xff0c;不…

【如何自建MCP服務器?從協議原理到實踐的全流程指南】

文章目錄 如何自建MCP服務器&#xff1f;從協議原理到實踐的全流程指南一、MCP協議是什么&#xff1f;核心架構 二、為什么要自建MCP服務器&#xff1f;1. 突破LLM的固有局限2. 實現個性化功能擴展3. 確保數據隱私安全 三、手把手搭建MCP服務器&#xff08;Python示例&#xff…

鴻蒙開發_ARKTS快速入門_語法說明_渲染控制---純血鴻蒙HarmonyOS5.0工作筆記012

然后我們再來看渲染控制 首先看條件渲染,其實就是根據不同的狀態,渲染不同的UI界面 比如下面這個暫停 開啟播放的 可以看到就是通過if 這種條件語句 修改狀態變量的值 然后我們再來看這個, 下面點擊哪個,上面橫線就讓讓他顯示哪個 去看一下代碼 可以看到,有兩個狀態變量opt…

【Java設計模式】第3章 軟件設計七大原則

3-1 本章導航 學習開辟原則(基礎原則)依賴倒置原則單一職責原則接口隔離原則迪米特法則(最少知道原則)里氏替換原則合成復用原則(組合復用原則)核心思想: 設計原則需結合實際場景平衡,避免過度設計。設計模式中可能部分遵循原則,需靈活取舍。3-2 開閉原則講解 定義 軟…

JVM即時編譯(JIT)

JVM基礎回顧 Java 作為一門高級程序語言&#xff0c;由于它自身的語言特性&#xff0c;它并非直接在硬件上運行&#xff0c;而是通過編譯器(前端編譯器)將 Java 程序轉換成該虛擬機所能識別的指令序列&#xff0c;也就是字節碼&#xff0c;然后運行在虛擬機之上的&#xff1b;…

剛體碰撞檢測與響應(C++實現)

本文實現一個經典的物理算法&#xff1a;剛體碰撞檢測與響應。這個算法用于檢測兩個剛體&#xff08;如矩形或圓形&#xff09;是否發生碰撞&#xff0c;并在碰撞時更新它們的速度和位置。我們將使用C來實現這個算法&#xff0c;并結合**邊界框&#xff08;Bounding Box&#x…

常用的國內鏡像源

常見的 pip 鏡像源 阿里云鏡像&#xff1a;https://mirrors.aliyun.com/pypi/simple/ 清華大學鏡像&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple 中國科學技術大學鏡像&#xff1a;https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣鏡像&#xff1a;https://pypi.doub…

鴻蒙小案例-京東登錄

效果 代碼實現 Entry Component struct Index {build() {Column() {Row() {Image($r(app.media.jd_cancel)).width(20)Text(幫助).fontSize(16).fontColor(#666)}.width(100%).justifyContent(FlexAlign.SpaceBetween)Image($r(app.media.jd_logo)).height(250).width(250)// …