常用到用css3實現的轉換,過渡和動畫

来源:https://www.cnblogs.com/qiujianmei/archive/2019/10/11/11653129.html
-Advertisement-
Play Games

為什麼要用css動畫替換js動畫 導致JavaScript效率低的兩大原因:操作DOM和使用頁面動畫。 用CSS3動畫替代JS模擬動畫的好處: 不占用JS主線程; 可以利用硬體加速; 瀏覽器可對動畫做優化(元素不可見時不動畫減少對FPS影響) CSS3動畫提供了2D和3D以及常規動畫屬性介面,它可以 ...


為什麼要用css動畫替換js動畫

導致JavaScript效率低的兩大原因:操作DOM和使用頁面動畫。

通常我們會通過頻繁的操作 DOM的CSS來實現視覺上的動畫效果,導致js效率低的兩個因素都包括在內了在頻繁的操作DOM和CSS時,瀏覽器會不停的執行重排和重繪,在PC版本的瀏覽器中,因為瀏覽器可用的記憶體比較大,用戶肉眼幾乎看不見頁面動畫產生的repaint和reflow,所以工程師幾乎無需過多的考慮動畫帶來的性能問題,但在移動設備上可大有不同,移動設備分配給內置瀏覽器的記憶體可沒有PC版本的瀏覽器記憶體可觀,目前對CSS3支持最好的莫過於webkit瀏覽器了,在webkit內核的瀏覽器,一是safari其次是chrome.

用CSS3動畫替代JS模擬動畫的好處:

  • 不占用JS主線程;
  • 可以利用硬體加速;
  • 瀏覽器可對動畫做優化(元素不可見時不動畫減少對FPS影響)

CSS3動畫提供了2D和3D以及常規動畫屬性介面,它可以工作在頁面的任何一個元素的任意一個屬性,CSS3的動畫是利用C語言編寫的,它是系統層面的動畫。

採用js動畫還是css3動畫,需要開發者根據不同的需求做出不同的抉擇,但應該遵循一個基本的原則是:如果你需要做2D動畫,請勿必使用CSS3的transition或animation

CSS3動畫與javascript模擬動畫有以下區別:

  1. CSS 3D動畫在js中無法實現
    CSS3的3D動畫是CSS3中非常強大的功能,因為它的工作原理是在一個三維的空間里,因此js是無法模擬出像CSS3那樣的3D動畫

  2. CSS 2D矩陣動畫效率高於js利用margin和left,top模擬的矩陣動畫
    CSS3的2D動畫是指是2D矩陣Transform變化,js當然是不能做變形動畫的。就拿坐標動畫來說,使用CSS3的transform做translateXY動畫比js中的position left,position right快了近700mm!而且視覺上也比js動畫流暢很多。

  3. CSS3其它常規動畫屬性的效率均低於js模擬的動畫
    常規動畫屬性在這裡是指:height,width,opacity,border-width,color

 

css3的屬性

2D 轉換
CSS3 轉換可以可以對元素進行移動、縮放、轉動、拉長或拉伸。
transform屬性,適用於2D或3D轉換的元素
transform-origin屬性,設置轉化元素位置

1.translate()方法,根據左(X軸)和頂部(Y軸)位置給定的參數,從當前元素位置移動。 

div {
  transform: translate(50px,100px);
  -webkit-transform: translate(50px,100px); /* Safari and Chrome */
}

2.rotate()方法,在一個給定度數順時針旋轉的元素。負值是允許的,這樣是元素逆時針旋轉。

div {
  transform: rotate(30deg);
  -webkit-transform: rotate(30deg); /* Safari and Chrome */
}

3.scale()方法,該元素增加或減少的大小,取決於寬度(X軸)和高度(Y軸)的參數

div {
    -webkit-transform: scale(2,3); /* Safari /
    transform: scale(2,3); / 標準語法 */
}

4.skew( [,])包含兩個參數值,分別表示X軸和Y軸傾斜的角度,如果第二個參數為空,則預設為0,參數為負表示向相反方向傾斜。

div {
    transform: skew(30deg,20deg);
    -ms-transform: skew(30deg,20deg); /* IE 9 /
    -webkit-transform: skew(30deg,20deg); / Safari and Chrome */
}

 

3D 轉換

 

translate3d(x,y,z)    定義 3D 轉化。
translateX(x)    定義 3D 轉化,僅使用用於 X 軸的值。
translateY(y)    定義 3D 轉化,僅使用用於 Y 軸的值。
translateZ(z)    定義 3D 轉化,僅使用用於 Z 軸的值。

scale3d(x,y,z)    定義 3D 縮放轉換。
scaleX(x)    定義 3D 縮放轉換,通過給定一個 X 軸的值。
scaleY(y)    定義 3D 縮放轉換,通過給定一個 Y 軸的值。
scaleZ(z)    定義 3D 縮放轉換,通過給定一個 Z 軸的值。

rotate3d(x,y,z,angle)    定義 3D 旋轉。
rotateX(angle)    定義沿 X 軸的 3D 旋轉。
rotateY(angle)    定義沿 Y 軸的 3D 旋轉。
rotateZ(angle)    定義沿 Z 軸的 3D 旋轉。

perspective(n)    定義 3D 轉換元素的透視視圖。

 

CSS3 過渡

transition    簡寫屬性,用於在一個屬性中設置四個過渡屬性。
transition-property    規定應用過渡的 CSS 屬性的名稱。
transition-duration    定義過渡效果花費的時間。預設是 0。transition-duration: 5s;
transition-timing-function    規定過渡效果的時間曲線。預設是 "ease"。
    linear    規定以相同速度開始至結束的過渡效果(等於 cubic-bezier(0,0,1,1))。
    ease    規定慢速開始,然後變快,然後慢速結束的過渡效果(cubic-bezier(0.25,0.1,0.25,1))。
    ease-in    規定以慢速開始的過渡效果(等於 cubic-bezier(0.42,0,1,1))。
    ease-out    規定以慢速結束的過渡效果(等於 cubic-bezier(0,0,0.58,1))。
    ease-in-out    規定以慢速開始和結束的過渡效果(等於 cubic-bezier(0.42,0,0.58,1))。
    cubic-bezier(n,n,n,n)  在 cubic-bezier 函數中定義自己的值。可能的值是 0 至 1 之間的數值。
transition-delay  規定過渡效果何時開始。預設是 0。transition-delay: 2s;

 

CSS3 動畫
@keyframes    規定動畫。    
animation    所有動畫屬性的簡寫屬性,除了 animation-play-state 屬性。    
animation-name    規定 @keyframes 動畫的名稱。    
animation-duration    規定動畫完成一個周期所花費的秒或毫秒。預設是 0。    
animation-timing-function    規定動畫的速度曲線。預設是 "ease"。    
animation-fill-mode    規定當動畫不播放時(當動畫完成時,或當動畫有一個延遲未開始播放時),要應用到元素的樣式。    
animation-delay      規定動畫何時開始。預設是 0。    
animation-iteration-count    規定動畫被播放的次數。預設是 1。
animation-direction    規定動畫是否在下一周期逆向地播放。預設是 "normal"。
animation-play-state    規定動畫是否正在運行或暫停。預設是 "running"。

 







您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ant design螞蟻金服基於react打造的一個服務於企業級產品的UI框架。而ant design pro呢?就是基於Ant Design這個框架搭建的中後臺管理控制台的腳手架。 話不多說,今天給大家分享一個自己寫的一個組件。 源碼如下: index.tsx文件: index.less文件: A ...
  • 第一步準備一個json文件echarts.json(名字無所謂),用來模擬從後臺獲取數據 第二步在頁面直接引用JS文件 第三步在body中準備一個容器,寫好樣式,用來顯示圖表 最後一步在js中初始化echarts對象,實現動態載入數據。 ...
  • 簡介 1. Sass 和 Scss Sass 和 Scss 其實是同一種東西,我們平時都稱之為 Sass;Scss 是 Sass 3 引入新的語法,其語法完全相容 CSS3,並且繼承了 Sass 的強大功能。也就是說,任何標準的 CSS3 樣式表都是具有相同語義的有效的 Scss文件。 兩者之間不同 ...
  • 1、null 對於null有一個歷史存留的 bug,null是對象類型嗎?雖然我們使用 typeof 檢測null是對象類型,這其實是一個 bug。 1.1 原因是什麼 因為 JS 最初的版本是 32 位系統的,為了將性能將用低位存儲變數類型信息,000 開頭表示代表的是對象,此時null表示全零, ...
  • 1. The Coolest Calendar 界面非常漂亮的一款日期選擇插件,有詳細的使用文檔,最新版本 1.5。 點擊下載 查看示例 2. DatePicker 這款日期插件支持單選、多選和時間區間選擇,功能齊全,有 Dialog 和 Flat 兩種模式。 點擊下載 查看示例 3. Tigra ...
  • 常見的有 、`強制瀏覽器全屏 IOS的Web APP模式 可點擊元素出現陰影` 本文主要講一些其他的或者實用的優化手段。 1. 彈出數字鍵盤 跟`IOS pattern input`的類型了。 2. 調用系統的某些功能 3. 打開原生應用 這種方式叫做 ,是一種協議,一般用來訪問 或者 中的某個功能 ...
  • 開發前準備 vue.js2.0中文,項目所使用的js框架 vue-router,vue.js配套路由 vuex,狀態管理 Element,UI框架 1,根據官方指引,構建項目框架 2,使用webpack+ sass 來寫css less是一門css預處理語言,它是拓展了css,增加了變數,Mixin ...
  • 解決Idea、WebStorm下使用Vue cli腳手架項目無法使用Webpack別名的問題 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...