學習css 3D有一段時間了,其中特別有意思的就是transform屬性和animate屬性。今天來梳理一下transform屬性中的Matrix;css
transform官方解釋是:bash
向元素應用 2D 或 3D 轉換。該屬性容許咱們對元素進行旋轉、縮放、移動或傾斜。學習
其實用大白話來講就是spa
一個物體的擺放方式與擺放位置的變化.net
Matrix是transform中的一個屬性,也是最重要的一個屬性。3d
由於transform所提供的全部 2D 或 3D 的轉換,都是經過 Matrix 和 Matrix3D 來實現的。code
官方給咱們的解釋是:orm
matrix 定義 2D 轉換,使用六個值的矩陣。cdn
matrix3d 定義 3D 轉換,使用 16 個值的 4x4 矩陣。blog
matrix 從字面上來看就是矩陣。 是否是讓想到了高數中的矩陣了?
沒錯! 它就是高數中的矩陣在CSS變換上的應用。
matrix 有六個值n, 實際上爲了方便理解與閱讀,一般把它記憶成這樣:
matrix(n,n,n,n,n,n) => matrix(a,b,c,d,e,f);
在css中,Matrix的原始值是:
transform: matrix(1,0,0,1,0,0);
複製代碼
放到數學中是這樣的:
「 「
1, 0, 0 也就是 a, c, e
0, 1, 0 ======> b, d, f
0, 0, 1 0, 0, 1
」 」
複製代碼
說到這裏,我好像忘了說它是怎麼進行變換的。
我理解的是:
經過兩個基向量(i向量和j向量)轉換以後的的結果,而不用知道轉換自己,咱們就能推導出二維空間中全部向量轉換以後的結果。
也就是說經過兩個基礎向量的變化來獲得這個變換系數,而後經過這個變換系數,咱們就能夠推導出全部向量的變換後的值。
因此說Matrix的實質就是表示這個矩陣變換的一個矩陣。
因此,它的變換過程就是就是一個矩陣乘法。即:
若是對於矩陣和線性變換理解的不太通順的能夠看看這篇文章 矩陣與線性變換
如今咱們已經知道Matrix變換的實質,可是a,b,c,d,e,f分別表明什麼還不知道。
根據上面的矩陣乘法獲得了一組方程式就是:
x' = ax + cy + e y' = bx + dy + f
複製代碼
若是咱們要x,y向右平移10個單位,那麼能夠推導一下:
x' = ax + cy + e + 10 複製代碼
e是一個常數 因此咱們想讓它向右平移n個單位,只須要在e的基礎上加上對應的n個單位
同理可得: 向左就是讓e減去對應的n個單位
咦,咱們是否是發現translateX就是這樣。
正如咱們發現的那樣,transfrom中變換屬性都是經過對 Matrix 和 Matrix3D 的一種經常使用的封裝
根據咱們上面的推理,translateY 也就是改變的f的值
y' = bx + dy + f ± 10 複製代碼
而 translate 就是對 translateY 和 translateX 的封裝
理解平移之後縮放的理解就簡單的多了!
若是咱們要橫向放大2倍,看咱們的基礎公式,也就是說x的係數 * 2
x' = ax + cy + e ---> 2ax + cy + e 複製代碼
若是是縱向放大2倍:
y' = bx + dy + f ---> bx + 2dy + f 複製代碼
即:
scale(x, y) -> scaleX(x) + scaleY(y) -> matrix(x * 1, 0, 0, y * 1, 0, 0);
複製代碼
後面的有點不知道怎麼形容,先存備
還在努力的查資料,努力理解中。。。